使用GNU Awk 5.0.0, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2),我想使用 . 檢查模式match。
我的示例文本如下(在行首有一個空格):
7 Plasmas Mobiles (30%)
使用以下正則運算式,我能夠匹配字串:
[0-9]{1,} .{1,} \([0-9]{1,}%\)
正如這個活生生的例子所證明的那樣:regexr.com/6n3fh
然而,awk 的match回傳 0:
awk '{print match($0, " [0-9]{1,} .{1,} \([0-9]{1,}%\)")}' reports/test
awk:命令。行:1:警告:轉義序列
\(' treated as plain('awk:命令。行:1:警告:轉義序列
\)' treated as plain)'0
為什么會這樣,我怎樣才能得到預期的行為,即得到“1”作為回傳match?
uj5u.com熱心網友回復:
在awk正則運算式中形成為/the-regex/,請參閱正則運算式。awk確實提供了動態正則運算式,其中參考了正則運算式。
awk區別對待這兩種風格的正則運算式。具體來說,雙引號字串被掃描兩次awk。這需要使用雙反斜杠進行轉義,例如\\.
在您的情況下,您可以使用:
match($0, / [0-9]{1,} .{1,} \([0-9]{1,}%\)/)
或者
match($0, " [0-9]{1,} .{1,} \\([0-9]{1,}%\\)")
示例使用/輸出
$ echo " 7 Plasmas Mobiles (30%)" | awk '{print match($0, / [0-9]{1,} .{1,} \([0-9]{1,}%\)/)}'
1
和
$ echo " 7 Plasmas Mobiles (30%)" | awk '{print match($0, " [0-9]{1,} .{1,} \\([0-9]{1,}%\\)")}'
1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487311.html
下一篇:在特定點bash中插入新行
