Вот пример файла:
somestuff...
all: thing otherthing
some other stuff
Я хочу добавить к строке, начинающейся all:
так:
somestuff...
all: thing otherthing anotherthing
some other stuff
Это работает для меня
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 (заменитель), вы можете найти строку, удовлетворяющую регулярному выражению. В приведенной выше команде
&
означает совпавшую строку.источник
Вы можете добавить текст
$0
в awk, если он соответствует условию:awk '/^all:/ {$0=$0" anotherthing"} 1' file
Объяснение
/patt/ {...}
если строка соответствует шаблону, заданному с помощьюpatt
, выполните действия, описанные внутри{}
./^all:/ {$0=$0" anotherthing"}
если строка начинается (обозначена^
) сall:
, добавьтеanotherthing
к строке.1
как истинное условие, запускает действие по умолчаниюawk
: распечатать текущую строку (print $0
). Это будет происходить всегда, поэтому он будет печатать либо исходную строку, либо измененную.Контрольная работа
Для вашего ввода он возвращает:
Обратите внимание, что вы также можете указать текст для добавления в переменную:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file somestuff... all: thing otherthing EXTRA TEXT some other stuff
источник
awk: can't set $0
/usr/xpg4/bin/awk
"хороший" awk.В bash:
while read -r line ; do [[ $line == all:* ]] && line+=" anotherthing" echo "$line" done < filename
источник
Вот еще одно простое решение с использованием sed.
$ sed -i 's/all.*/& anotherthing/g' filename.txt
Пояснение:
all. * означает, что все строки начинаются со слова «все».
& представляют совпадение (т.е. полную строку, начинающуюся со слова "все")
затем sed заменяет первое на более позднее и добавляет слово "другое"
источник
Решение с awk:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
Проще говоря: если строка начинается с
all
печати строки плюс «еще что-то», иначе выведите только строку.источник
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
пар. Еслиcondition
опущен, действия выполняются для каждой записи. Если{actions}
они опущены, а условие оценивается как истинное (как в случае с числом1
), то действие по умолчанию - распечатать текущую запись.