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

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

最佳答案

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

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

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

关于regex - 在正则表达式中表达超出 $ 的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512717/

相关文章:

java - 在 Java 中使用 Matcher 和 Pattern 对象时出现问题

正则表达式:匹配以 4-9 开头的数字?

linux - 被另一个用户移动后的当前目录

c# - 如何从 linux 终端 (cloud9) 运行 .exe

regex - 压缩 awk/sed 管道命令

linux - 打印 $i 除非 $i 小于 10。使用 awk 或其他方式

python - 在python中使用正则表达式在字符串列表中查找匹配关键字后的下一个单词

python - 在Python中搜索和分割带有特殊字符的字符串

linux - 使用 UNIX/Linux 命令管道和重定向列出文件

bash - 使用键值连接两个 csv 文件