sedコマンドは、パラメーターが長すぎることを示します。

sedコマンドは、パラメーターが長すぎることを示します。

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リストが長すぎます。これはsedORの問題ではなく、grepシステムがパラメータに提供するスペースの量に関する問題です。 ㅏ議論する「パラメータリストが多すぎる」エラーに関する情報は、同じフォーラムにあります。

この問題を解決する1つの方法は次のとおりですxargs

grep -rl str1 . | xargs sed -i 's/str1/str2/'

xargs入力を受け取り、sed入力全体の適切なサイズの部分を使用して呼び出しを繰り返します。

スペース、";"、"|"その他の特殊文字などを含む奇妙なファイル名があるかどうかはわかりません。

find . -type f -exec sed -i 's/str1/str2/' {} \;

findすべての一般ファイルを繰り返し、ファイルに次のものが含まれている場合は置き換えを実行します。文字列1grepファイルに含まれていることを確認するために呼び出されます。文字列1非常に無駄です。

元の質問と同様に、これらのソリューションはすべてのファイルを処理できると想定していますsed。つまり、テキストファイルです。わからない場合、このコードはsedファイルがテキストファイルであることを確認した後にのみ実行されます。

find . -type f -exec sh -c "file {} | grep -q text && sed -i 's/str1/str2/' {}" \;

おすすめ記事