Как добавить в конец строк, содержащих шаблон с sed или awk?
вот пример файла:
somestuff...
all: thing otherthing
some other stuff
что я хочу сделать, это добавить в строку, которая начинается с all: такой:
somestuff...
all: thing otherthing anotherthing
some other stuff
6 ответов:
это работает для меня
sed '/^all:/ s/$/ anotherthing/' fileпервая часть-это шаблон для поиска, а вторая часть - обычная замена sed с использованием
$В конце строки.если вы хотите изменить файл во время процесса, используйте
-iопцииsed -i '/^all:/ s/$/ anotherthing/' fileили вы можете перенаправить его в другой файл
sed '/^all:/ s/$/ anotherthing/' file > output
Это должно работать для вас
sed -e 's_^all: .*_& anotherthing_'С помощью команды s (substitute) вы можете найти строку, которая удовлетворяет регулярному выражению. В приведенной выше команде,
&обозначает совпадающую строку.
в bash:
while read -r line ; do [[ $line == all:* ]] && line+=" anotherthing" echo "$line" done < filename
вы можете добавить текст в
в awk, если он удовлетворяет условию:awk '/^all:/ {=" anotherthing"} 1' fileобъяснение
/patt/ {...}если линия соответствует шаблону, заданномуpatt, затем выполните действия, описанные в{}.- в этом случае:
/^all:/ {=" anotherthing"}если строка начинается (представлено^) Сall:, затем добавитьanotherthingв строку.1как истинное условие, запускает действие по умолчаниюawk: вывести текущую строку (тест
для вашего данного ввода он возвращает:
somestuff... all: thing otherthing anotherthing some other stuffобратите внимание, вы также можете предоставить текст для добавления в переменную:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {=mytext} 1' file somestuff... all: thing otherthing EXTRA TEXT some other stuff
решение с awk:
awk '{if ( ~ /^all/) print , "anotherthing"; else print }' fileпросто: если строка начинается с
allвыведите строку плюс "anotherthing", иначе выведите только строку.
вот еще одно простое решение с использованием sed.
$ sed -i 's/all.*/& anotherthing/g' filename.txtобъяснение:
все.* означает, что все строки начинаются с "все".
& представляют матч (т. е. полную строку, которая начинается с 'all')
затем sed заменяет первое на более позднее и добавляет слово "anotherthing"