Grep: поиск и замена полной строки

13

Команда

 grep "foo" myfile.txt

печатает все совпадающие строки в моем файле.

Теперь я хочу заменить полную строку другой строкой. Как я могу это сделать?

зажим
источник

Ответы:

13

Если вы соответствуете подстроке всей строки, вы можете использовать sкоманду sed с регулярным выражением, чтобы убрать оставшуюся часть строки:

sed -i 's/^.*foo.*$/another string/' myfile.txt

или используйте cкоманду для замены совпавшей строки за один раз:

sed -i '/foo/ { c \
another string
}' myfile.txt

Если вы не хотите вводить многострочные команды в командной строке, вместо этого вы можете поместить их в скрипт:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt
Бесполезный
источник
Благодарность! когда я использую второй вариант, я получаю: sed: -e выражение # 1, char 0: не соответствует `{'
зажим
в конце первой строки вам нужно набрать \, а затем нажать Return - важно, чтобы \ выходил из этой первой новой строки. Затем убедитесь, что он }'находится в отдельной строке от another string: замена - это все, что находится на этой второй строке, в том числе, }если вы поставили его там.
бесполезно
-1

Вы можете использовать INPLACE functionnality в СЭД :

sed -i -e 's/foo/bar/' myfile.txt
Корен
источник
Это заменит только все, fooа barне всю строку.
Джахид