2

strings.txt1行に100個の文字列を含むファイルがあります

string1
string2
...
string100

これらの文字列のそれぞれについて、その文字列を含むすべての行を検索file_to_look.txtします。これで、、、などのようにgrep100回実行できましたが、入力に時間がかかります。grep string1 file_to_look.txtgrep string2 file_to_look.txt

そんなにタイピングする必要がない方法はありますか?

編集:私のはかなり大きいfile_to_look.txtので、100回ではなく1回だけ通過するソリューションは素晴らしいでしょう。file_to_look.txt

4

5 に答える 5

4

-f(GNU)grepにパターンファイルを渡すためのものです。

grep -f strings.txt file_to_look.txt
于 2012-11-06T22:27:42.390 に答える
0
while read line; do grep "$line" file_to_look.txt; done < strings.txt

それはまさにあなたが求めたことをします。代わりの ";" あなたが適切と思うように改行のために。

xargsは、人々が提案する他のオプションです。私の提案は、一般的に最初に別の選択肢を探すことです。xargには、物事を非常にうまくいかない可能性のあるたくさんの落とし穴があるからです。

xargsに関するGregのbashwiki

于 2012-11-06T22:20:44.437 に答える
0

通常、xargsは、複数の値を持つコマンドを繰り返すために使用されます。

xargs -I{} grep {} file_to_look.txt < strings.txt
于 2012-11-06T22:22:40.963 に答える
0

while read次のように、を使用してそれを行うことができます。

cat strings.txt | while read line ; do grep "$line" file_to_look.txt ; done

その他の方法については、以下をご覧ください。

于 2012-11-06T22:24:40.093 に答える
0

次の短いスクリプトでそれを行うことができます。

#!/bin/bash

file_name=string.txt
file_to_look=file_to_look.txt
patterns=$(tr '\n' '|' $filename)
patterns=${patterns%?} # remove the last |
grep -E $patterns $file_to_look

これにより、すべての検索パターンがまとめられgrep-Eオプションを使用して一度に処理されるため、100回ではなく、1回grepだけ解析する必要があります。file_to_look.txt

于 2012-11-06T22:32:47.120 に答える