web-dev-qa-db-ja.com

ファイルから複数のキーワードをgrepするにはどうすればよいですか?

Unixの grep 関数を使用して、1つのコマンドラインでファイルから複数の行(異なるキーワードを使用)を引き出したい。

たとえば、私は次のようなものがあります:

doc-A1-151
file-A2-15646
table-A3-1654
file-B1-15654
doc-B2-15654
table-B3-13546
file-C1-164654
doc-C2-16354
table-C3-13565

そして、A1、B3、およびC2行のみを含むファイルのサブバージョンが必要です。

それ、どうやったら出来るの?

4
Kirt

Grepでは、正規表現を使用して-Eフラグを使用してファイル内のパターンを照合するか、grep -Eと同等のegrepコマンドを使用できます。

grep -E 'A1|B3|C2' filename

または

egrep 'A1|B3|C2' filename

縦棒|は、OR演算子で、文字列A1またはB3またはC2に一致することを意味します。

正規表現の構文はツールごとに異なりますが、一般的に構文は同じです。これがRubyの正規表現のテストと構築に頻繁に使用する正規表現テストハーネスです: http://rubular.com/r/mJyIMO5hJN

ただし、正規表現の導入には、機能が制限されているという警告を前に付ける必要があります。格言は次のとおりです。

一部の人々は、問題に直面したとき、「わかっている、私は正規表現を使用する」と考えます。今、彼らは2つの問題を抱えています。

8
solo

それを見つけた。新しい行で区切られたテキストファイルに用語を入力し、それを-fフラグと一致するパターンとして入力します。

pattern_file.txt:

A1
B3
C2

コマンド:

grep -f pattern_file.txt input_file.txt
7
Kirt