Ось приклад файлу:
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
Ви можете додати текст до $0
awk, якщо він відповідає умові:
awk '/^all:/ {$0=$0" anotherthing"} 1' file
/patt/ {...}
якщо рядок відповідає шаблону, заданому patt
, виконайте дії, описані всередині {}
./^all:/ {$0=$0" anotherthing"}
якщо рядок починається (представлений ^
) з all:
, додайте anotherthing
до рядка.1
як істинна умова ініціює дію за замовчуванням awk
: друк поточного рядка ( print $0
). Це трапляється завжди, тому буде надруковано оригінальний рядок або модифікований.Для заданого вводу він повертає:
somestuff...
all: thing otherthing anotherthing
some other stuff
Зверніть увагу, що ви також можете надати текст для додавання у змінну:
$ 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. * означає всі рядки, що починаються з "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}
опущено, а умова має значення true (що стосується числа 1
), то за замовчуванням дія буде надруковано поточний запис.