ディレクトリとサブディレクトリ内のすべてのテキストを置換するbash関数

ディレクトリとサブディレクトリ内のすべてのテキストを置換するbash関数

私は (Google で)、ディレクトリとサブディレクトリ内のすべてのファイルのすべての出現箇所を置き換えるために完璧に機能する次の行を見つけました:

grep -lr previoustext | xargs sed -i 's/previoustext/newtext/g'

とてもうまく機能します。

しかし、今私は次のようにファイル内の関数でそれを使用しようとしていますbash_aliases:

freplace() {
    grep -lr previoustext | xargs sed -i 's/previoustext/newtext/g';
}

しかし、私が電話すると

freplace previoustext newtext

私の端末では何も起こりません...。テキストは置き換えられません。

なぜ動作しないのか、理由が分かりますか?

答え1

関数に引数を渡す場合は、位置パラメータを使用して引数を取得する必要があります。

freplace() {
    grep -lr "$1" | xargs sed -i "s/$1/$2/g"
}

/または sed に特殊な他の文字を含む文字列では機能しないことに注意してください。

関連情報