Я хочу упростить выполнение такой команды:
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 приводит к «неожиданному концу файла». Интересно, это что-то с символами }
? Я попытался избежать их, например \{\}
, но это не решило проблему.
Помогите пожалуйста?
function sedall() { find. -type f -exec sed -i "s|$1|g" {} \; ; }
Там много проблем.
{ 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