我用awk进行了以下测试:
示例:
如果我有一个文件有:
miz[space][space][end-of-line]
[empty line]
pel 如果我这样做了:
$ cat mul.txt |awk 'sub(/miz\s+/,"misspell")'
misspell awk发现了模式。
但是,如果我从行的第一个移除这两个空格:
miz[end-of-line]
[empty line]
pel 我得到:
$ cat mul.txt |awk 'sub(/miz\s+/,"misspell")'
也就是说,awk不匹配。
$和\s之间似乎有些微妙之处,我无法理解。
而且,我似乎无法找到一种方法来表达包含$之外的匹配的正则表达式,但是第一个片段可以工作。
有人能解释一下这里有什么问题吗?
更新:
如下:$ cat mul.txt |awk 'sub(/miz(\s+|$|^$|^\s+$)+pel/,"misspell")'也不起作用
发布于 2014-02-02 16:24:52
首先,\s是特定于gnu-awk的,而非gnu awk不支持它。现在回到您的问题上,您可以像这样使用空RS (),您的regex在这两种情况下都可以工作:
awk 'sub(/miz[[:space:]]/,"misspell")' RS='\0' file注意RS="\0',它将RS设置为空字节。
发布于 2014-02-02 16:06:45
使用此正则表达式可以同时处理行尾和空格:
/miz([ ]+|\n)/https://stackoverflow.com/questions/21512717
复制相似问题