まず、私はcygwinを使用しているという事実はここで非常に関連性が高いと思います。
理論的には、私はこれを行う方法をすでに知っています。
cat file | xargs grep pattern
問題は、一部のファイルパスfile
にスペースがあることです。ファイルは次のようになります。
subdir/foo/bar.html
subdir/f o o/ba r.html
subdir/~foo/bar.html
これによりエラーが発生します。この問題を解決する方法を読んだ。 use 。しかし、出力をnullで終わる行にxargs -0
する方法がわからないので、ファイル全体を1行に圧縮するという意味だと思いました。cat
その結果、次のエラーが発生します。
xargs: argument line too long
修正する:私が読んでいたファイルにはもう存在しないいくつかのパスがあることがわかりました。偶然にも、これらの道はすべて一つずつあり、~
これが問題だと思います。この文書は存在しないことがわかりました。それでも宇宙に関するすべてが残っています。
ベストアンサー1
xargs -d '\n'
入力ファイルに1行に1つのファイル名が含まれている場合に使用されます。例えば
xargs -d '\n' grep pattern < file
ファイル名が「マイホームディレクトリ」で始まる場合は、まずこのシンボルを実際のホームディレクトリに変更する必要があり~
ます。~
たとえば、
sed -e "s=^~=$HOME=" file | xargs -d '\n' grep pattern
このsedスクリプトは二重引用符で囲まれています。考える変数を$HOME
sedスクリプトに挿入し、/ sが含まれているため、これを演算子の区切り文字として使用します(=
しかしそうである可能性は低い)。s
$HOME
=
またはを使用している場合は、xargsオプションと一緒にfind
findオプションを使用してください。例えば-print0
-0
find ... -print0 | xargs -0 grep pattern
または単にfind-exec
オプションを使用してください:
find ... -exec grep pattern {} +