Как добавить в конец строк, содержащих шаблон с 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"