findコマンドで見つけたパスで指定されたファイルでgrepコマンドが特定の単語を見つけるようにするにはどうすればよいですか?
locate my.cnf | grep user
(grepコマンドがコマンドを見つけるために見つけたファイルから「user」という単語を検索したい)
答え1
検索結果が間違いなく空白なしでパスを返す場合は、xargs
次のようになります。
locate my.cnf | xargs grep user
xargs
null
ただし、パスまたはファイル名にスペースを含めることができる場合を処理するために区切り文字として使用しlocate
(または文字列を返すために使用するプログラム)、それらを区切り文字として送信するように指示して自分自身を保護する習慣が必要です。そう:
locate -0 my.cnf | xargs -0 grep user
パスに/name with space/my.cnf
。
答え2
私が正しく理解したら、次のようにすることができます。
#!/bin/sh
typeset what1=$1
typeset what2=$2
[ "$#" -eq 2 ] || { echo "Two arguments expected"; exit 1; }
locate ${what1} | while read file; do
grep ${what2} ${file} /dev/null
done
locate
what1
一致する文字列の引数()に一致するファイルを検索しますwhat2
。このdev/null
パラメーターは、一致するファイル名を強制的にgrep
報告します。
答え3
1本のライン:
for file in $(locate my.cnf) ; do grep -r user "$file" ; done
Locateから取得したディレクトリ名の下のファイルからパターンを検索しようとすると、そのパターンが処理され、-r
それ以外の場合は削除されます-r
。