как запустить `find -exec` внутри функции bash --- проблема экранирования символов и неожиданные конец файла

Я хочу упростить выполнение такой команды:

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 приводит к «неожиданному концу файла». Интересно, это что-то с символами }? Я попытался избежать их, например \{\}, но это не решило проблему.

Помогите пожалуйста?

2
30.06.2020, 02:16
2 ответа
function sedall() { find. -type f -exec sed -i "s|$1|g" {} \; ; }
2
18.03.2021, 23:23

Там много проблем.

  • Переменные не раскрываются внутри одинарных -кавычек.
  • { 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
6
18.03.2021, 23:23

Теги

Похожие вопросы