ファイルから特定の単語を抽出する方法

ファイルから特定の単語を抽出する方法

たとえば、myfile.logという名前の次のファイルがある場合

1  entry1      # Blah blah 
2  entry2      # Blah blah
3  entry3      # Blah blah
4  entry4      # Blah blah
5  myentry5      # Blah blah
6  myentry6      # Blah blah
7  yourentry7      # Blah blah
8  yourentry8      # Blah blah
9  ourentry9      # Blah blah
10 ourentry10      # Blah blah

出力が次のように「entry」を含む単語だけを抽出するにはどうすればよいですか?

entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

私はさまざまなgrep、sed、awkコマンドを試しましたが、欲しいものだけを得ました。行のすべてを出力するか、アイテムにすべてを含めるのではなく、アイテムだけを話すように見えます。

編集 - ファイルは実際には次のようになります(クリーンアップ)。すべての項目を抽出するには、RTRを使用する必要があります。

10.0.0.1     MYRTR001      # Router in Raleigh
10.0.0.2     MYSW100      # Switch in Raleigh
10.0.0.3     MYRTR002      # Router in Houston
10.0.0.4     MYSW001      # Switch in Houton

答え1

使用sed

$ sed '/entry/s/[^ ]* *\([^ ]*\).*/\1/' input_file
entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

使用awk

awk '/entry/{print $2}' input_file
entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

答え2

一致する文字列のみを返すには、GNU grepiwthオプションを使用してください。-o

grep -o '[^ ]*entry[^ ]*'

entryファイル内の場所や前後の内容に関係なく、その文字列を含む単語のみを印刷します。各行の先頭にある数字が実際に存在せず、説明目的でのみ含まれていても、目的の結果が返されます。

出力:

entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

答え3

フィールド区切り文字が空白文字の場合:

awk -v RS=' ' 'index($0, "entry")' infile

答え4

2 番目の列の値のみをテストする場合は、次のようにします。

awk '$2 ~ /entry/{print $2}' file

関連情報