я делаю
sed "s/test1/replacetext" testfile.txt
Я пытаюсь использовать /q для сбоя, чтобы найти 'test1' и выполнить скрипт оболочки. Как мне это сделать? Спасибо, Нейт
решение1
С GNU sed
и несколькими строками ввода:
sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
- В строках, содержащих
pattern
:- Добавьте строку в буфер удержания
- Выполнить замену
- печатать каждую строку
$
При достижении последней строки ( ):- получить буфер удержания
- Если пространство шаблона не содержит
pattern
, выход с кодом выхода1
- Пустые регулярные выражения
//
используют последний использованный шаблон регулярного выражения.
Альтернатива – awk
:
awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
- Если строка содержит
pattern
, переменнаяrepl
увеличивается и производится замена - В конце выйдите со значением
logical not
переменной (еслиrepl
равно нулю, выйдите со статусом1
)
Альтернатива – grep
ввод заранее, например:
if grep -q 'pattern' file; then
# input contains pattern - do sed replacement
sed 's/pattern/replacement/' file
else
: input does not contain pattern - execute shell script
fi