sed代码适用于4.2.1但不适用于4.1.5

时间:2017-04-21 01:10:29

标签: sed rhel suse

我有以下用于RH6和sed 4.2.1的sed代码

>> echo "SUSE Linux Enterprise Server 11 ( x86_64 ) VERSION = 11 PATCHLEVEL = 2" | sed s/.*VERSION\ =\ //
11 PATCHLEVEL = 2
>> sed --version
GNU sed version 4.2.1

但它在SUSE 11和sed 4.1.5

时失败了
>> echo "SUSE Linux Enterprise Server 11 ( x86_64 ) VERSION = 11 PATCHLEVEL = 2" | sed s/.*VERSION\ =\ //
sed: No match.
>> sed --version
GNU sed version 4.1.5

我发现以下代码在两个版本中的工作方式不同。 SUSE中的sed 4.1.5无法匹配任何内容。

echo ab | sed s/.*//

这是sed的已知问题吗?它有解决方案吗?

2 个答案:

答案 0 :(得分:3)

由于你没有引用星号,你的shell正试图将它全局化。在你的一个系统上,这个通配符失败并返回原始字符串。在你的另一个系统上它匹配某些东西,你的替换正则表达式被破坏。 始终引用shell可能会考虑的参数" special"。

答案 1 :(得分:-1)

我发现sed 4.1.5需要单引号来使事情有效。以下作品。

echo ab | sed 's/.*//'

但是sed 4.2.1并不需要这个。