Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使awk使用字符类_Regex_Awk_Character Class - Fatal编程技术网

Regex 使awk使用字符类

Regex 使awk使用字符类,regex,awk,character-class,Regex,Awk,Character Class,如何让awk识别角色类 例如,这: echo "a\n1\nb\n2\nc" | awk '/1/' 按预期输出1,但这: echo "a\n1\nb\n2\nc" | awk '/\d/' 如果我希望1和2都能在过滤器中生存,则不输出任何内容 我认为这可能与shell转义(zsh)有关,但awk'/\\d/'也不起作用。您可以尝试使用拼写字符类: [ghoti@pc ~]$ printf "a\n1\nb\n2\nc\n" | awk '/[[:digit:]]/' 1 2 [ghoti@

如何让awk识别角色类

例如,这:

echo "a\n1\nb\n2\nc" | awk '/1/'
按预期输出
1
,但这:

echo "a\n1\nb\n2\nc" | awk '/\d/'
如果我希望
1
2
都能在过滤器中生存,则不输出任何内容


我认为这可能与shell转义(zsh)有关,但
awk'/\\d/'
也不起作用。

您可以尝试使用拼写字符类:

[ghoti@pc ~]$ printf "a\n1\nb\n2\nc\n" | awk '/[[:digit:]]/'
1
2
[ghoti@pc ~]$ 
据我所知,像
\d
这样的符号实际上并不是ERE的一部分,ERE是大多数awk变体(以及)都能理解的regex方言


更新

正如在评论中指出的,Linux的一些发行版可能已经安装,伪装成
awk
。mawk和awk不一样。它是一个最小的awk克隆,旨在提高执行速度,而不是功能性。尽管mawk支持扩展正则表达式,但它无法实现POSIX“类”,如
[:digit://code>,
[:upper://code>,
[:lower://code>,等等


如果您运行的系统提供非标准工具,如
mawk
,而不是标准工具,那么您应该期望生活在一个有趣的时代。Awk脚本的开发人员希望
/usr/bin/Awk
上的任何二进制代码都像Awk一样工作。如果没有,则表示系统已损坏。

谢谢您的提问!我只是花了20分钟试图弄明白为什么我的awk 1型班轮不起作用。@Sierrastandil-是的,mawk在这方面的莫名其妙的失败由来已久,一直是人们关注的话题。我对mawk用户最好的建议是。。请注意您的工具,如果您喜欢在正则表达式中使用POSIX字符类,那么就不要使用mawk。实际上,POSIX字符类(即:[:digit:]])不适用于mawk<1.3.4的版本,而且许多发行版目前都附带1.3.3(检查了最新的稳定Debian、Ubuntu、Mandriva)。参考文献:@戈蒂是真的。不幸的是,mawk(1.3.3)是Ubuntu和Debian中的默认awk。啊,我的哀悼。幸运的是,使用FreeBSD.:-)我最后一次使用的Ubuntu是10.04,它将Gawk3.1.6安装为awk。您确定不能使用软件包系统安装
gawk
apt cache search gawk
似乎表明它是一个可用的软件包。您不需要使用默认工具,是吗?@ghoti更新不错,谢谢!关于BSD,我前一段时间在VM中尝试了几个变体,但出于几个原因,我现在将坚持使用Linux。不过,你是对的,至少可以说,Linux发行版之间的差异可能令人讨厌。