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: unmatched `{'
затискати

наприкінці першого рядка потрібно ввести \, а потім натиснути Return - важливо, щоб \ уникнув цього першого рядка. Потім переконайтеся, що значення }'знаходиться на окремій лінії від another string: заміна - це все на другому рядку, у тому числі, }якщо ви його помістили.
Марно

-1

Ви можете використовувати INPLACE functionnality в СЕД :

sed -i -e 's/foo/bar/' myfile.txt

Це замінить лише кожного, fooа barне цілу лінію ..
Джахід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.