str1
現在のディレクトリにあるファイルのすべての文字列をstr2
.Iに置き換えたいと思います。
sed -i s/str1/str2/g `grep str1 -rl ./`
コマンドまたは
sed -i s/str1/str2/g `grep str1 -rl --include="*.*" ./`
パラメーターがあまりにもキムエラーが発生しました。誰でも理由を教えてもらえますか?私はこのコマンドをグーグルしました。sed
そしての紹介も読んでみましたが、grep
何の問題もないと感じました。
ベストアンサー1
grep str1 -rl .
包含生成str1
リストが長すぎます。これはsed
ORの問題ではなく、grep
システムがパラメータに提供するスペースの量に関する問題です。 ㅏ議論する「パラメータリストが多すぎる」エラーに関する情報は、同じフォーラムにあります。
この問題を解決する1つの方法は次のとおりですxargs
。
grep -rl str1 . | xargs sed -i 's/str1/str2/'
xargs
入力を受け取り、sed
入力全体の適切なサイズの部分を使用して呼び出しを繰り返します。
スペース、";"、"|"その他の特殊文字などを含む奇妙なファイル名があるかどうかはわかりません。
find . -type f -exec sed -i 's/str1/str2/' {} \;
find
すべての一般ファイルを繰り返し、ファイルに次のものが含まれている場合は置き換えを実行します。文字列1。grep
ファイルに含まれていることを確認するために呼び出されます。文字列1非常に無駄です。
元の質問と同様に、これらのソリューションはすべてのファイルを処理できると想定していますsed
。つまり、テキストファイルです。わからない場合、このコードはsed
ファイルがテキストファイルであることを確認した後にのみ実行されます。
find . -type f -exec sh -c "file {} | grep -q text && sed -i 's/str1/str2/' {}" \;