我想让运行这种命令变得更容易:
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" {} \; ; }