название. echo "eh]" | sed -r 's/[\]a]/lol/g'
возвращает eh]
вместо ehlol
. ошибок не возникает, поэтому я предполагаю, что \]
- это своего рода магия sed. Я устал от постоянных проблем села, но я должен использовать его. так как избежать] в выражении sed substition?Как избежать] символ в классе символов в sed
ответ
Вы можете просто использовать echo "eh]" | sed -r 's/[]a]/lol/g'
:
- без обратной косой черты
- и
]
в качестве первого символа внутри скобок.
и \
имеют некоторые особенности при использовании внутри скобок. Процитирую из documentation:
Ведущую^меняет смысл списка, так что он соответствует любому символу не в списке. Чтобы включить] в список, сделайте его первым символом (после^при необходимости), чтобы включить - в список, сделать его первым или последним; включить^положить его после первого символа.
Персонажи
$, *, ., [,
и\
обычно не являются специальными в списке. Например,[\*]
соответствует либо '\', либо '*', потому что \ здесь не является особенным. Однако строки, такие как [.ch.], [= A =] и [: space:], являются специальными в списке и представляют собой сопоставляющие символы, классы эквивалентности и классы символов соответственно, и [поэтому является специальным в списке, когда он а затем., =, или:. Кроме того, если не в режиме POSIXLY_CORRECT, специальные списки, такие как \ n и \ t, распознаются внутри списка. См. «Спасания».
wrt 'символьные кластеры классов' - вы смешиваете 2 слова. Это обсуждение относится к выражениям скобок, а не к символьным классам. Вы можете использовать класс символов внутри выражения скобки, но это две отдельные вещи. Класс символов будет '[: alpha:]', выражение в скобках, которое включает в себя класс символов, будет '[[: alpha:]]' и выражение в скобках, которое включает в себя зависящий от локали подобный диапазон символов вместо символьного класса будет '[a-zA-Z]'. –
Использовать 'echo" eh] "| sed -r 's/[] a]/lol/g'' (без обратной косой черты). См. Объяснение о '' '' не special inside '[' ']' в инфо-документации sed в главе 'Regular Expressions' –
спасибо, но, похоже, это работает только тогда, когда' '' является первым символом в символьном классе. Например. '[a] b]' deosn't работать. Я бы очень не хотел, чтобы этого не делали. Любые другие решения? – nah
@nah Да, это должно быть на первом месте. Прочтите руководство. ;) – hek2mgl