
假設我有一個這樣的文件:
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
sed
plusawk
應該可以解決問題!
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
符合所有以兩個數字結尾的字串。