SED help: как заменить строку другой, содержащей квадратные скобки - PullRequest
0 голосов
/ 12 октября 2011

Я использую OSX и у меня возникла проблема при попытке заменить строку в файле с помощью команды sed.Проблема в том, что замещающая строка содержит квадратную скобку.В частности, я хочу заменить эту строку «message --------------» (- пробелы)
на эту «message ------ [да]»

но если я наберу

sed "message              /s//message     \ [ yea ]" filein > fileout

, я получаю это сообщение: bad flag в команде замены: '['

Я пытался поставить \ перед [, но это не такт работа.Кто-нибудь может помочь?Спасибо!

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Попробуйте это:

sed 's/message    /&[ yea ]/g' filein > fileout

& - это согласованное выражение.Никакой специальной обработки для скобок не требуется.

Мне было не совсем понятно, как должны обрабатываться пробелы.Выше просто добавляет [ yea ] в конец последовательности пробелов фиксированной длины.Если предпочтительнее заменить последние пробелы последовательности проб произвольной длины на [ yea ], необходима более сложная команда:

sed 's/\(message \{1,\}\)       /\1[ yea ]/g' filein > fileout

Идея в этом случае состоит в том, чтобы соответствовать шаблону, который имеетдве части.Во-первых, это группа, заключенная в скобки \( \), которая ищет message, за которым следует один или несколько пробелов (\{1,\}. После этого должно быть ровно семь пробелов. Когда найден соответствующий текст, он заменяется текстомгруппы (\1, обозначающий первую группу), за которой следует [ yea ]. Стратегию здесь можно адаптировать к другим шаблонам поиска-замены, например, с несколькими группами или другим текстом.

0 голосов
/ 12 октября 2011

Без точного подсчета пробелов:

echo "message         foo" | sed "s/message        /message [ yea ]/"

сообщение [да] foo

Команда замены - 's / IN / OUT /', а команда m ... неизвестна - команда m не известна. Еще одним ключом к успеху является маскировка одного символа [сразу, без пробела между ними, с обратной косой чертой. Однако - с правой стороны выражения замещения группа не имеет особого смысла, поэтому вам не нужно их маскировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...