2017-01-07 12 views
0

название. echo "eh]" | sed -r 's/[\]a]/lol/g' возвращает eh] вместо ehlol. ошибок не возникает, поэтому я предполагаю, что \] - это своего рода магия sed. Я устал от постоянных проблем села, но я должен использовать его. так как избежать] в выражении sed substition?Как избежать] символ в классе символов в sed

+1

Использовать 'echo" eh] "| sed -r 's/[] a]/lol/g'' (без обратной косой черты). См. Объяснение о '' '' не special inside '[' ']' в инфо-документации sed в главе 'Regular Expressions' –

+0

спасибо, но, похоже, это работает только тогда, когда' '' является первым символом в символьном классе. Например. '[a] b]' deosn't работать. Я бы очень не хотел, чтобы этого не делали. Любые другие решения? – nah

+3

@nah Да, это должно быть на первом месте. Прочтите руководство. ;) – hek2mgl

ответ

0

Вы можете просто использовать echo "eh]" | sed -r 's/[]a]/lol/g':

  • без обратной косой черты
  • и ] в качестве первого символа внутри скобок.

и \ имеют некоторые особенности при использовании внутри скобок. Процитирую из documentation:

Ведущую^меняет смысл списка, так что он соответствует любому символу не в списке. Чтобы включить] в список, сделайте его первым символом (после^при необходимости), чтобы включить - в список, сделать его первым или последним; включить^положить его после первого символа.

Персонажи $, *, ., [, и \ обычно не являются специальными в списке. Например, [\*] соответствует либо '\', либо '*', потому что \ здесь не является особенным. Однако строки, такие как [.ch.], [= A =] и [: space:], являются специальными в списке и представляют собой сопоставляющие символы, классы эквивалентности и классы символов соответственно, и [поэтому является специальным в списке, когда он а затем., =, или:. Кроме того, если не в режиме POSIXLY_CORRECT, специальные списки, такие как \ n и \ t, распознаются внутри списка. См. «Спасания».

+0

wrt 'символьные кластеры классов' - вы смешиваете 2 слова. Это обсуждение относится к выражениям скобок, а не к символьным классам. Вы можете использовать класс символов внутри выражения скобки, но это две отдельные вещи. Класс символов будет '[: alpha:]', выражение в скобках, которое включает в себя класс символов, будет '[[: alpha:]]' и выражение в скобках, которое включает в себя зависящий от локали подобный диапазон символов вместо символьного класса будет '[a-zA-Z]'. –

 Смежные вопросы

  • Нет связанных вопросов^_^