私がやっている
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