Как глобально заменить строки в строках, НЕ начиная с определенного шаблона - PullRequest
40 голосов
/ 10 февраля 2011

Я хочу глобально заменить строку foo строкой bar, используя sed.Это должно быть сделано только для строк, которые НЕ начинаются со строки ## Input.

Я не могу заставить его работать.Я пробовал подобные вещи, но дошел до того, что не уверен, что знаю, что делаю:

sed -i '/^##Input/ s/foo/bar/g' myfile

Пожалуйста, помогите!

Ответы [ 3 ]

68 голосов
/ 10 февраля 2011

Вам просто нужно отменить совпадение, используя !:

sed -i '/^##Input/! s/foo/bar/g' myfile
0 голосов
/ 01 августа 2016

Некрасивый ответ на некрасивый запрос (то есть они получают то, что просили):

echo \{
for file in *.json; do
    sed -n '/^[\{\}]/! s/\([^\,]\)$/\1,/; /^[\{\}]/!p' $file
done
echo \{
0 голосов
/ 10 февраля 2011

Вы должны сбежать # как в \#.

...