AIX 上的 sed 正则表达式问题(第 2 部分)

Posted

技术标签:

【中文标题】AIX 上的 sed 正则表达式问题(第 2 部分)【英文标题】:sed regex isses on AIX (part 2) 【发布时间】:2014-09-05 13:00:33 【问题描述】:

我正在尝试在 AIX 上执行此命令:

sed 's/\([a-Z]*\),.*/\1/' config >config.new

其中 config 是具有以下格式的文件:

item1,file1
item2,file2

但我总是收到以下错误:

sed: 0602-404 Function s/\([a-Z]*\),.*/\1/ cannot be parsed.

我怀疑正则表达式有问题,但它在 SUN 平台上运行良好。

【问题讨论】:

这会产生任何输出吗? sed 's/\([a-Z]*\),.*/\1/' config 也许能逃脱/... 不,它没有。它只是给出了那个错误。 不,这也无济于事。 我不太喜欢你的 [a-Z],请尝试替换为 [a-zA-Z] 或 [[:alpha:]] 看看是否有效。也许这就是你的麻烦的来源...... 【参考方案1】:

您想保留逗号之前的所有内容。相反,您可以删除逗号后的所有内容:

  's/,.*//g'

您的表达式的问题可能是[a-Z],其中 a 是 ASCII 97,Z 是 ASCII 90。

如果你需要\1,你也可以使用[^,](除了逗号)

  's/\([^,]*\),.*/\1/'

【讨论】:

如果是这样,cut -d',' -f1 file 也会成功。【参考方案2】:

Z 在 a 之前,因此您的范围向后。要么这样做:A-z 或 a-zA-Z,正如建议的那样。

【讨论】:

谢谢!这就是问题所在。

以上是关于AIX 上的 sed 正则表达式问题(第 2 部分)的主要内容,如果未能解决你的问题,请参考以下文章

AIX 上的 Sed 无法识别 -i 标志

OS X 上的 sed - 似乎无法在正则表达式中使用 +

多行上的 sed 正则表达式无法捕获所有

sed工具与正则表达式的使用(shell第四天)

Linux基础-sed+正则表达式

如何使用 sed 命令正则表达式在文件中查找第一个空行并删除