我在做
sed "s/test1/replacetext" testfile.txt
我嘗試使用 /q 來尋找“test1”並執行 shell 腳本失敗。我怎樣才能做到這一點?謝謝內特
答案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
為零,以 status 退出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