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行のみを含むファイルのサブバージョンが必要です。
それ、どうやったら出来るの?
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つの問題を抱えています。
それを見つけた。新しい行で区切られたテキストファイルに用語を入力し、それを-f
フラグと一致するパターンとして入力します。
pattern_file.txt:
A1
B3
C2
コマンド:
grep -f pattern_file.txt input_file.txt