Linux

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

  • March 17, 2020

我在做

sed "s/test1/replacetext" testfile.txt

我正在嘗試使用 /q 來查找“test1”並執行 shell 腳本。我怎樣才能做到這一點?謝謝內特

使用 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

引用自:https://unix.stackexchange.com/questions/573129