在正则表达式中表达超出$ $的匹配

时间:2014-02-02 16:03:25

标签: regex linux awk

我用awk尝试了以下测试:

例:
如果我有一个文件:

miz[space][space][end-of-line]  
[empty line]  
pel  

如果我这样做:

$ cat mul.txt |awk 'sub(/miz\s+/,"misspell")'  
misspell   

awk找到了模式。

但是,如果我从第一行删除2个空格:

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")'不起作用

2 个答案:

答案 0 :(得分:2)

首先\s是gnu-awk特定的而非gnu awk不支持它。现在回到你的问题,你可以使用这样的空RS(记录分隔符),你的正则表达式将适用于这两种情况:

 awk 'sub(/miz[[:space:]]/,"misspell")' RS='\0' file

注意RS="\0'RS设置为空字节。

答案 1 :(得分:0)

使用此正则表达式,以便它可以处理空格和行尾:

/miz([ ]+|\n)/