2014-12-23 47 views
1

我在函数中有以下awk行。正则表达式与awk交替

match($0,/'(.*)'/,a) 

但是我想使它所以它将匹配'(.*)'"(.*)"。我曾尝试用不同的替代语法编写它,例如:

match($0,/'(.*)'|"(.*)"/,a) 

但是它不想工作。

只是想知道是否有人能指出这里发生了什么。

+1

我们通常可以为您提供的更多信息提供更多帮助。例如,如果您告诉我们“它不想要工作”的方式(语法错误?意外的输出?没有输出?其他?),并发布一些示例输入和期望输出,并告诉我们脚本是否在文件中或者从命令行执行,如果你在Windows或UNIX上以及你正在使用的是哪个版本的awk(gawk?mawk?别的东西?),那将是非常有用的。 –

回答

2

尝试这样做,如果它是一个awk脚本:

match($0, /['"](.*)['"]/, a) 

如果不是,(命令行):

match($0, /[\042\047](.*)[\042\047]/, a) 
+2

这将匹配不匹配引号的字符串。例如''abc''会匹配,你应该使用反向引用来安全地玩它。 –

+0

'awk'甚至支持反向引用吗? –

+0

@MarkReed不,它不会。 –

3

您需要:

match($0,/\047([^\047]*)\047|"([^"]*)"/,a) 

a使得呆子-具体。如果您将脚本存储在以awk -f script执行的文件中,则可以将\047 s更改为' s。