単語のみを含む.csvデータ行を保持し、dog
2cat
番目の列でのみ確認できます。 「dog」という単語が別の列には表示されますが、2番目の列には表示されない場合は無視する必要があります。
たとえば、次のような場合があります。
email1.com dog
email2dog.com steve
email3.com cat
予想出力:
email1.com dog
email3.com cat
長い単語のリストを維持する必要があるかもしれないので、可能であれば他のファイルからそれらの単語をロードしてください。
答え1
そしてsed
:
$ sed -n -e 's/dog$/&/p' -e 's/cat$/&/p' file
email1.com dog
email3.com cat
または、次のものを使用できますawk
。
awk '$2~/^dog|cat$/' file
答え2
さまざまな方法:
dog
orがcat
常に行の最後の単語である場合:awk '/(dog|cat)$/' file grep -E '(dog|cat)$' file sed -n '/\(dog\|cat\)$/p' file perl -ne 'print if /(dog|cat)$/' file
dog
または、cat
2番目のどこにでも表示できる場合スペースで区切る土地:awk '$2~/dog|cat/' file grep -E '^\S+\s+\S*(dog|cat)\S*\s*' file perl -ane 'print if $F[1]=~/dog|cat/' file sed -nr '/^\S+\s+\S*(dog|cat)\S*\s*/p' file sed -n '/^\S\+\s\+\S*\(dog\|cat\)\S*\s*/p' file
ファイルから検索パターンを読み取るには、次のようにします。
awk '{if(NR==FNR){a[$0]++; next}for(p in a){if($2~p){print}}}' patterns file
答え3
{ sed 's/[]$^&\./*[]/\\&/g;s/$/$/'|
grep -f- ./greppedfile
} <words
複数の一致パターンを処理する状況を処理できます。words
各行にはパターンが含まれています。可能な正規表現を慎重にエスケープします。メタ文字これにより、結果パターンが行の末尾に固定されるため、その中のすべての文字はwords
文字通り一致grep
し、パターンは次の場合にのみ一致します。言葉行末で発生します。これが私が欲しいものを理解したと思うものです。
通常、メタ文字エスケープのない固定文字列モードをgrep
使用できるため、このようなメタ文字エスケープはありません。-F
ただし、これはパターンを固定するためにメタ文字を使用できないため、取得したものを使用することを意味$
します。
答え4
grep
PCREで使用:
$ grep -P '^[^ ]+\s+dog|cat(?=\s|$)' file.txt
email1.com dog
email3.com cat
dog
cat
これにより、行の2番目の列に表示される行のみが印刷されます。