私が何をしているのか
sed "s/test1/replacetext" testfile.txt
/q を使用して "test1" を見つけ、シェルスクリプトを実行しようとしましたが失敗しました。どうすればいいですか?ありがとう、ネイト
答え1
sed
GNUと複数行の入力を使用する:
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