如果搜尋失敗,使用 sed 執行 shell 腳本

如果搜尋失敗,使用 sed 執行 shell 腳本

我在做

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

相關內容