誰かが私に以下の単一の文字列からパターン_ARAを含む単語のみをgrepするように案内しますか?.
ストリング:
LINK:['IM219MIR_ARA1','IM18Q4_ARA1','SM18Q4_ARA1','IM18PLANNING_ARA1','IM118Q4DYNVA_ARA1','IM218Q4DYNVA_ARA1','IM119EIOPALTG_ARA1','IM219EIOPALTG_ARA1','SM119EIOPALTG_ARA1']}
予想される出力:
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
grep
は-o
を受け入れ、一致が同じ行からのものであっても、別の行に一致するテキストのみを印刷します。また、-w
を受け入れて、正規表現がWord全体と一致する(またはまったく一致しない)ことを強制します。Wordは、文字、数字、およびアンダースコアの最大のシーケンスです。だからあなたは単に使うことができます:
grep -ow '\w*_ARA\w*'
この場合、必要に応じて実際に-w
オプションを省略して同じ結果を得ることができます。これは、ここでの正規表現がWord文字のみを\w
と明示的に照合しているためです。
ファイル名引数がないため、標準入力から読み取ります。表示したテキストがファイル内にある場合(たとえば、input.txt
と呼ばれます)、引数として渡します。
grep -ow '\w*_ARA\w*' input.txt
これは出力します:
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
技術的に、これが生成する出力は、質問で示したものとは少し異なります。これは、表示した期待される出力は、表示したテキストに1回しか表示されない場合でもIM119EIOPALTG_ARA1
が2回リストされるためです。これは間違いだと思いますが、実際には1回だけ必要です。
cut
コマンドとsed
コマンドを使用する場合は、次のコマンドを使用します。
<test.txt cut -d'[' -f2 | cut -d']' -f1 | sed "s/,'/\\n/g" | sed 's/.$//' | cut -d\' -f2 | grep _ARA
2部構成の説明:
grep _ARA
は、フィルタリングする必要がある行を検索しますcut -d'[' -f2
は、単語の前の文字を削除します。cut -d']' -f1
の場合も同様で、後の文字が削除されますsed "s/,'/\\n/g"
は、各単語を1行で抽出します<test.txt
はcut
およびgrep
コマンドの単なるリダイレクトですこの4つの前のコマンドの後、結果は次のとおりです。
'IM219MIR_ARA1'
IM18Q4_ARA1'
SM18Q4_ARA1'
IM18PLANNING_ARA1'
IM118Q4DYNVA_ARA1'
IM218Q4DYNVA_ARA1'
IM119EIOPALTG_ARA1'
IM219EIOPALTG_ARA1'
SM119EIOPALTG_ARA1'
したがって、各単語の終わりにある'
を削除するには、次のように追加します
sed 's/.$//'
最初の'
には、
cut -d\' -f2
したがって、最終結果は次のとおりです。
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
このコマンドの詳細が必要な場合は、 Eliah Kagan を使用して私の説明を読むことができます。