Linux で grep を使用して DOS の行末を含むファイルを検索したいです。次のようになります:
grep -IUr --color '\r\n' .
上記は文字通りには一致しているように見えますが、rn
これは望ましいことではありません。
この出力はxargsを介してtodosにパイプされ、次のようにcrlfをlfに変換します。
grep -IUrl --color '^M' . | xargs -ifile fromdos 'file'
ベストアンサー1
おそらく、grep は、この目的には適したツールではありません。grep は、すべてのファイル内の一致する行ごとに 1 行を出力します。たとえば、10 行のファイルに対して todos を 10 回実行したい場合を除いて、grep は最適な方法ではありません。find を使用してツリー内のすべてのファイルに対して file を実行し、その中の "CRLF" を grep すると、各ファイルに対して、DOS スタイルの行末を持つ 1 行の出力が得られます。
find . -not -type d -exec file "{}" ";" | grep CRLF
次のようなものが得られます:
./1/dos1.txt: ASCII text, with CRLF line terminators
./2/dos2.txt: ASCII text, with CRLF line terminators
./dos.txt: ASCII text, with CRLF line terminators