如何在 bash 函数中运行 `find -exec` --- 转义字符和意外文件结尾的问题

如何在 bash 函数中运行 `find -exec` --- 转义字符和意外文件结尾的问题

我想让运行这种命令变得更容易:

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

所以我在 my 中创建了一个函数.bashrc来缩短它:

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

这样我就能做到

sedall wpp-splash|wpp_splash

但有一个语法错误。我不确定它是什么,但 bash 函数导致“意外的文件结束”。我想知道这是否与}角色有关?我尝试逃避他们,\{\}但这并没有解决问题。

有什么帮助吗?

答案1

那里有很多问题。

  • 变量不会在单引号内扩展。
  • { 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

答案2

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

相关内容