Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Bash 命令混乱-solaris sed不';我不喜欢我的正则表达式_Bash_Unix_Sed_Solaris - Fatal编程技术网

Bash 命令混乱-solaris sed不';我不喜欢我的正则表达式

Bash 命令混乱-solaris sed不';我不喜欢我的正则表达式,bash,unix,sed,solaris,Bash,Unix,Sed,Solaris,我在最好的时候与regex的斗争,但在regex测试网站上磨练了这一点,我可以看到它应该工作。但是,当我在Solaris上将其放入sed时,会出现一个乱码命令错误: cat p.csv | sed -e 's/(([^,]+,){8})([^,]+)(,.*$)/\3/g' 我不明白这是怎么回事。如果我使用xxx而不是捕获组,我只会得到完整的输入,这对我来说就更没有意义了 我的正则表达式应该允许我提取csv文件的一列-我有理由想使用sed和正则表达式。BRE捕获组必须转义:\(\),BRE没有

我在最好的时候与regex的斗争,但在regex测试网站上磨练了这一点,我可以看到它应该工作。但是,当我在Solaris上将其放入sed时,会出现一个乱码命令错误:

cat p.csv | sed -e 's/(([^,]+,){8})([^,]+)(,.*$)/\3/g'
我不明白这是怎么回事。如果我使用xxx而不是捕获组,我只会得到完整的输入,这对我来说就更没有意义了


我的正则表达式应该允许我提取csv文件的一列-我有理由想使用sed和正则表达式。

BRE捕获组必须转义:
\(\)
,BRE没有
+
,只有一些sed在BRE中支持它作为扩展,但必须转义,
\+
,量词必须转义
\{
。我不知道solaris sed是否支持扩展正则表达式,但如果支持,您的命令应该可以工作
sed-E
通常用于ERE。如果不能使用ERE并且不支持
\+
,则必须使用
[^,][^,]*
而不是
[^,]+
。另外,第二个捕获组在任何情况下似乎都不是必需的。还有第四个。@BenjaminW。谢谢你-我没有意识到我使用的sed版本是如此有限。我发现gnu sed也可以在同一台机器上使用,此后一切正常。