Linux
如何使用適當的正則表達式在 awk 中查找模式?
使用以下範例,我試圖找出
regex
在我的awk program
.
- 輸出只能是長度不超過 5 的數字:ig 15251
- 輸出只能有兩個字母,5 之前和之後的
"H" & "O"
任何數字和“O”可以是可選的:ig HO722 或 799H89090=< 3``=<
- 輸出不能包含任何有空格或除數字以外的任何單詞:ig hkks kjsla aaa –> 不可接受
貓文件名
00ISM00123 189902 078HP890201 HO90902 123H7292 234HO7027 12345556 GV18029039 kslal HOsjlk jj 123 687iOu7900
我嘗試了以下腳本
awk '$1~/^[0-9]{,3}([hH][oO]?)[^a-zA-Z]/' filename`
但不要覆蓋文件名中的數字, 即
> 189902 > 12345556
當我嘗試以下腳本時,輸出仍然不正確!
awk '$1~/^([0-9]{,3}([hH][oO]?)?)[^a-zA-Z]/' filename
任何解釋幫助都非常感謝!
我把它分成兩個正則表達式,看起來它正在工作:
cat filename | grep -E '^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$'
正則表達式的第一部分將嘗試只有 5 位數字的文件名,第二部分將嘗試具有 0-3 位數字、1 個“h”或“H”字母、0 或 1 個“oO”字母、0 到 5 的文件名位數。
此正則表達式
awk
也適用於:cat filename | awk '/^[0-9]{5}$|^[0-9]{0,3}[hH]{1}[oO]{0,1}[0-9]{0,5}$/ {print}'
如果您不完全依賴於 awk,那麼
grep
在這裡效果很好:$ grep -E '\<[[:digit:]]{1,3}HO?[[:digit:]]{1,5}\>' filename 123H7292 234HO7027
那是你要找的輸出嗎?我想知道是否
HO90902
應該匹配。
\<
and\>
是字邊界,因此“12345678H123”將不匹配。