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

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

私が何をしているのか

sed "s/test1/replacetext" testfile.txt

/q を使用して "test1" を見つけ、シェルスクリプトを実行しようとしましたが失敗しました。どうすればいいですか?ありがとう、ネイト

答え1

sedGNUと複数行の入力を使用する:

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

関連情報