正则表达式中的.awk转义字符

时间:2014-07-15 21:46:03

标签: regex awk escaping

我不太明白角色在.awk脚本中是如何工作的。

我想在这个文件中找到这一行:

 #Name Surname City Company State Probability Units Price Amount

如果我写的话:

awk < test.txt '/\#/ {print $1}'

在命令行中,一切正常,输出为#Name。

但是,如果我尝试以下列方式在.awk文件中执行相同的操作:

/\#/ {print $1};

我没有输出。此外,由于某种原因,gEdit不会将“\”识别为.awk中的转义字符。

为什么会发生这种情况,是否有解决方法?

2 个答案:

答案 0 :(得分:2)

这对我有用,你也不需要逃避#,因为它不是具有特殊含义的角色。

my.awk)内容:

/#/ {print $1};

然后使用awk解释器执行它:

hwnd@lsh1001:~$ awk -f my.awk test.txt
#Name

答案 1 :(得分:2)

#不是RE元字符,因此不需要在RE的上下文中对其进行转义以使其按字面意思理解。

我不知道gEdit是什么(我也不想,所以不需要解释!)所以我无法帮助你解决这个问题 - 也许用{{1发布另一个问题那么知道该工具的人会看一下吗?

在命令行上运行:

gEdit

将产生与:

相同的输出
awk '/\#/ {print $1}' test.txt

假设tst.awk包含:

awk -f tst.awk test.txt

同样,您不需要逃避/\#/ {print $1} ,但这不是重点。如果那不是您遇到的情况,那么最可能的原因是您用来创建tst.awk的编辑器以某种方式损坏了文件,可能是通过将控件-Ms添加到行尾。

最后 - 默认情况下,awk语句会被换行符终止,不需要在行尾添加虚假的冒号,如果你不明白的话,你可能会把某个地方放在某个地方你真的不想要它。