Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 HP-UX:正则表达式重复不起作用?_Regex_Sed_Hp Ux - Fatal编程技术网

Regex HP-UX:正则表达式重复不起作用?

Regex HP-UX:正则表达式重复不起作用?,regex,sed,hp-ux,Regex,Sed,Hp Ux,我想挑选那些第四个字段不是空的行。 但是,以下重新设置不起作用: ^\([^,]*,\)\{3\}[^,][^,]*,.*$ 然后我试图打印捕获的组,结果把我弄糊涂了。 看来这种重复是行不通的。 谁能解释一下吗 详情(见第4~6行): 此awk将打印第4个字段不为空的所有行 awk -F, '$4' file 1AAA,BBB,CCC,DDD,EEE,FFF 2AAA,BBB,CCC,DDD,EEE,FFF 3AAA,BBB,,DDD,EEE,FFF 7AAA,BBB,CCC,DDD,EEE,

我想挑选那些第四个字段不是空的行。 但是,以下重新设置不起作用:

^\([^,]*,\)\{3\}[^,][^,]*,.*$
然后我试图打印捕获的组,结果把我弄糊涂了。 看来这种重复是行不通的。 谁能解释一下吗

详情(见第4~6行):


awk
将打印第4个字段不为空的所有行

awk -F, '$4' file
1AAA,BBB,CCC,DDD,EEE,FFF
2AAA,BBB,CCC,DDD,EEE,FFF
3AAA,BBB,,DDD,EEE,FFF
7AAA,BBB,CCC,DDD,EEE,FFF
8AAA,BBB,CCC,DDD,EEE,FFF
在这种情况下,使用
awk
可能更简单,因为测试字段更简单。

在这里,它只是测试
$4
是否为空,然后打印该行。

您可以尝试下面的GNU-sed命令

$ sed -nr '/^[A-Z0-9]+,[A-Z]*,[A-Z]*,[A-Z]+,[A-Z]*,[A-Z]*$/p' file


当然,用awk做这件事要简单得多,正如Jotne提出的纤细而完美的答案所示

如果您想调查HP-UX sed的问题,我建议您查看并尝试通过sed的stdin而不是通过文件传递数据:
cat tmp|sed-n…
sed-n…


不过,我第一次尝试解决您的问题是用单引号替换双引号,因为您的shell可能正试图用双引号解释
$/
*
,我不知道您使用的是什么shell…

预期的输出是什么?我想知道为什么要打印4~6行。{3} 应该有3个文件…但是那些行只有两个文件。我不知道你为什么用复杂的命令来完成这个简单的任务。你能解释一下正则表达式吗?谢谢。但我想知道的是为什么regex重复不起作用。我知道,但使用regex可能并不总是最简单的解决方案,而且这个
awk
很容易理解,应该适用于所有系统。:)是的,枪的版本很好用。只是HP-UX不起作用。OP并没有说字段必须是字母数字字符,只是空的。因此,它在字段
4
=
3345
中失败,谢谢。它是sh,仍然不起作用。我注意到他们提到了HPUX版本。我的是11.11。可能只是个虫子。另一个类似问题:
$ sed -nr '/^[A-Z0-9]+,[A-Z]*,[A-Z]*,[A-Z]+,[A-Z]*,[A-Z]*$/p' file
$ sed -nr '/^.*,.*,.*,.+,.*,.*$/p' file
1AAA,BBB,CCC,DDD,EEE,FFF
2AAA,BBB,CCC,DDD,EEE,FFF
3AAA,BBB,,DDD,EEE,FFF
7AAA,BBB,CCC,DDD,EEE,FFF
8AAA,BBB,CCC,DDD,EEE,FFF