2017-04-06 10 views
0

ノイズのある名前のリストとクリーンな名前のリストがあります。クリーンな名前は名前の正確な部分文字列であると確信しています。bashで部分文字列一致の行を検索する最も効率的な方法は?

たちはたとえばvar?goldenfooため、ノイズの名前を持っている、と私はこの

golden 
blue 
red 

goldenのように見えるテキストファイルcleannamesから、出力したいとしましょう。

私はgrepをcat ed cleannamesに使ってみましたが、これはやや難解です。

答えて

1

試してください:あなたが何かをしたい場合は

grep -Fof cleannames.txt text.txt 

、ちょうどあなたの質問を編集し、詳細を追加します。

Impedit quasらtotamでオムニ::)

letがこれを持っていると言います。 Voluptas repellat voluptas possimus rerum est ゴールデン nihil。それは最小です。 Quia accusamus rerum voluptate。ドロレス・モレスティア(Dolores molestiae)ドルドーレ・ディニシモス・クアラート・マグニ クイック・ルシエンシス・キューシーゴールデン ditate quo hic doloremque molestiae。 Odio は、quisquam eligendi esseです。 IDの中のナウの建築家 dolorum eveniet。モードエラーは、赤色 lam aut。 Soluta veniam corporis est。Illum maxime ゴールデン perceptionndis incidunt qui 結果。 Laborum quia ab voluptatem。

golden 

又は

clean=(golden red blue) #or read into array from a file... 
text='var?goldenfoo' 

grep -Fof <(printf "%s\n" "${clean[@]}") <<< "$text" 
を印刷する

golden 
golden 
red 
golden 

echo 'var?goldenfoo' | grep -Fof cleannames.txt 

を印刷します枚の

プリント

golden 

ので、あなたの代わりにcleannames.txtの任意のプロセス置換を有することができ、また、代わりにあなたがどんなリダイレクトを持つことができtext.txtの。どのような組み合わせでも動作します。

+0

名前はファイルに格納されていないため、変数です。 – D1X

+1

あなたは言っています:_fromテキストファイルcleannamesはthis_のように見えます - so ... – jm666

+0

cleannamesはファイルですが、名前は 'var?goldenfoo' **ではありません**。 – D1X

0

あなたはmapfileを使用して、アレイ内のきれいな名前を保つことができます。

srch 'var?goldenfoo' 
golden 

srch 'foobar?bluebox' 
blue 
0

場合:としてそれを呼び出すその後

srch() { for i in "${ary[@]}"; do [[ $1 == *"$i"* ]] && echo "$i"; done; } 

mapfile -t ary < cleannames 

は、このような検索機能を使用grepよりも速く検索したい場合は、 Silver Searcherを試してみてください。

関連する問題