используйте sed для выполнения скрипта оболочки, если поиск не удался

используйте sed для выполнения скрипта оболочки, если поиск не удался

я делаю

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

Связанный контент