Ось приклад файлу:
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
Ви можете додати текст до $0awk, якщо він відповідає умові:
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), то за замовчуванням дія буде надруковано поточний запис.