如果我有一个看起来像这样的文件,例如名为 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
假设您只想测试第二列中的值,您应该这样做:
awk '$2 ~ /entry/{print $2}' file