たとえば、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 grep
iwthオプションを使用してください。-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