ファイルに保存されているファイルのリストがあり、各ファイルを検索して検索語を検索したいと思います。
ただし、xargs
パラメータは一重引用符で囲まれた文字列として渡されるため、プレフィックスが付いたすべてのファイルに対して 'が拡張されないため、エラーが~
発生します。No such file or directory
~
これは私が実行しているコマンドです。cat search-files | xargs -n 1 grep 'search-term'
search-files
実際に入り、パスを直接変更せずにこの問題をどのように解決できますか?
答え1
しかし、他の問題に直面する可能性があります。*
検索ファイルにまたは$(rm important-file)
?行が含まれている場合はどうなりますか?
@steeldriverのヒントを展開すると、次のようになります。
sed "s,^~,$HOME," search-files | xargs -n 1 grep 'search-term'
答え2
わかりました。ㅏ解決策がありますが、なぜ動作するのかわかりません。
挿入すると、xargs -i sh -c 'echo {}'
チルダが展開されます。
完全なコマンドは次のとおりです。
cat search-files | xargs -i sh -c 'echo {}' | xargs -n 1 grep 'search-term'
編集:良いです。仕組みは次のとおりです。コマンドを実行するときは、xargs
それぞれと一重引用符を[command]
使用してください。[initial-args]
したがって、元のコマンドと同様に、およびgrep
は{}
一重引用符で囲みます。しかし、それを行うことで、sh -c 'echo {}'
私たちは同じことecho
になります。これにより、正常な波形拡張が可能です。一重引用符がないと機能しません。{}
[initial-arg]
sh
'echo {}'