この種のコマンドをより簡単に実行したいと思います。
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機能のために「予期しないファイルの終わり」が発生します。これが}
キャラクターと関係があるかどうか疑問に思います。私は彼らから逃げようとしましたが、\{\}
問題は解決されませんでした。
助けが必要ですか?
答え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" {} \;
}
1つではなく2つの引数を取り、実行する前に両方の引数が指定されていることを確認してください。
$ 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" {} \; ; }