grep
私はUnixに初めてアクセスし、searchlist.txtというテキストファイルに保存されているパターンを使用してテキストファイルのリストを作成する方法を理解したいと思います。テキストファイルは、次のように改行で区切られた名前のリストです。
「ワシントン、マサ」
「アダムス、ジェーン」
非常に大きなテキストファイルでこの名前を検索する必要があります。大文字と小文字も無視する必要があります。調べましたが、grep -i -f searchlist.txt *.txt
私が得た唯一の出力は次のとおりです。
「アダムス、ジェーン」:「ワシントン、マサ」
私はこれらの名前がテキストファイルのどこかにあると確信しています。私はsearchlist.txtをフォーマットするために必要な特定の方法があるかどうか疑問に思います。リストが改行文字で区切られるように、コマンドに何とか指定する必要がありますか?
答え1
次の内容を含む「needles」というファイルがある場合:
washington, martha
adams, jane
以下を含む「haystack」というファイルもあります。
blah blah blah washington, martha blah
all work and no play
makes adams, jane a dull
girl
が利用可能でなければなりませんgrep -i -f needles haystack
。
ただし、「針」に次のものが含まれている場合:
"washington, martha"
"adams, jane"
grep -i -f <(sed 's/"//g' needles) haystack
名前から二重引用符を削除するには、を使用する必要があります。引用符で囲まれた名前だけを検索したくない場合。
もちろん、これは「干し草の山」の状況では機能しません。
And on that day she changed her name to adams,
jane.
リストの誰かがArtists Used to Be Called Princesからインスピレーションを得て、実際の名前に二重引用符を追加することにした場合は、名前をもう少し明確にし、先頭のみを削除して各行をsed
引用符で終わることができますgrep -i -f <(sed 's/^"//;s/"$//' needles) haystack
。