grep 和 sed 指令

grep 和 sed 指令

假設我有一個這樣的文件:

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf

我只想搜尋最後兩個字元數字為sed,grep和 的字串awk

答案1

grep 和 sed 指令

看來原始問題的格式不正確。因此,最簡單的 grep 和 sed 指令是:

egrep '[0-9]{2}$' /path/to/file

sed -rn '/[0-9]{2}$/p' /path/to/file

我將在下面留下解釋,其中包括有關這些命令的信息,但也可以在單行上處理多個字串。它們仍然可以工作,但包含額外的、可能無關的程式碼。


格雷普

grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file

解釋

  • [^ ]*匹配任意數量的非空格字元。
  • [0-9]\{2\}匹配兩個數字。 (你可以用[0-9][0-9]它代替。)
  • ( |$)數字應該是“單字”的結尾,因此後面應該跟一個空格或行尾終止符。

我更喜歡使用擴展 grep,因為您不需要轉義花括號。因此,

grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file

或者

egrep '[^ ]*[0-9]{2}( |$)' /path/to/file

該問題已被編輯,但如果一行中有多個匹配項,並且您只想輸出匹配項,則使用該-o標誌。 IE

egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file

塞德

</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'

解釋

  • </path/to/file tr ' ' '\n'輸入檔案並將所有空格更改為換行符。
  • sed -rn將擴展正規表示式(類似於上面)與 一起使用-r,並且不要立即用 列印所有輸出-n
  • [0-9]{2}$此正規表示式與上面 grep 行中的正規表示式類似。但是,由於我們已經刪除了所有空格,因此我們不需要在開頭定義非空格字符,也不需要在結尾定義可能的空格。
  • /<regex>/p列印出符合的行<regex>

答案2

sedplusawk應該可以解決問題!

sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'

如果你的檔案包含這些字串逐行 awk只應該做到這一點!

awk '/[0-9][0-9]$/' file1

如果你想要匹配以結尾的字串正好兩個數字和不多,然後改用這些指令:

sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/'

awk '/[^0-9][0-9][0-9]$/' file1

輸出:

adasfddfd09
dsassd90897
sdddsdf56 

解釋

  • sed將輸入字串拆分為多個字串。
  • awk符合所有以兩個數字結尾的字串。

相關內容