Text-Processing

如何從文件中提取特定單詞

  • May 21, 2022

如果我有一個看起來像這樣的文件,例如名為 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

我將如何只提取包含“條目”的單詞,所以輸出應該看起來像

entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

已經嘗試了各種 grep、sed、awk 命令,但只能得到我想要的,它要麼在行上輸出所有內容,要麼我得到它只是說 entry 而不是包含 entry 的所有內容

編輯 - 文件在現實中看起來像這樣(已清理) - 需要使用 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

使用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

使用 GNU grepiwth-o僅返回匹配字元串的選項:

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

這將只列印包含字元串的單詞,entry無論它們在文件中的什麼位置或它們之前或之後的內容。即使每行開頭的數字實際上並不存在並且您只是出於描述目的而將它們包含在內,它也會返回所需的內容。

輸出:

entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

引用自:https://unix.stackexchange.com/questions/703251