如何从文件中提取特定单词

如何从文件中提取特定单词

如果我有一个看起来像这样的文件,例如名为 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

假设您只想测试第二列中的值,您应该这样做:

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

相关内容