検索が失敗した場合は sed を使用してシェル スクリプトを実行します。

検索が失敗した場合は sed を使用してシェル スクリプトを実行します。

私がやっている

sed "s/test1/replacetext" testfile.txt

'test1' が見つからない場合に /q を使用してシェル スクリプトを実行しようとしています。どうすればいいでしょうか? ありがとう、ネイト

答え1

GNUsedと複数行の入力の場合:

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

関連情報