Bash

如何在 bash 函式中執行 find -exec — 轉義字元和文件意外結束的問題

  • June 29, 2020

我想讓執行這種命令更容易:

find . -type f -exec sed -i 's|wpp-splash|wpp_splash|g' {} \;

所以我在我的創建了一個函式.bashrc來縮短它:

function sedall() { find . -type f -exec sed -i 's|$1|g' {} \; }

這樣我可以

sedall wpp-splash|wpp_splash

但是有一個語法錯誤。我不確定它是什麼,但 bash 函式導致“文件意外結束”。我想知道是不是和}人物有關?我試著像逃避它們一樣\{\},但這並沒有解決問題。

請問有什麼幫助嗎?

那裡有很多問題。

  • 變數不會在單引號內展開。
  • { command ; }需要終止分號(或換行符)。
  • sedall wpp-splash|wpp_splash這被理解為管道,因為您沒有用引號保護管道字元。

我建議這樣做:

sedall(){
   [ "$#" = 2 ] || { echo Two arguments needed; return 9; }
   find . -type f -exec sed -i "s|$1|$2|g" {} \;
}

它需要兩個參數而不是一個,它會檢查這兩個參數是否在執行之前給出。

$ cat a b
XABCX
YABCY
$ sedall ABC DEF
$ cat a b
XDEFX
YDEFY

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