冷漠地使用'?'在sed?

时间:2015-12-17 08:57:12

标签: regex sed

我打败了我的标题,知道为什么这个简单的sed

  

sed&#s; s / s:?s * / z /'测试

测试

efgs:sgfe
ssssssssss
rsts
abc

没有匹配 如果我省略?,它将起作用。我希望第一行与efgzgfe

匹配

并查看regexbuddy的screencap。为什么它匹配呢?

2 个答案:

答案 0 :(得分:2)

根据this\?是GNU扩展名。

在Mac上:

$ echo 'efgs:sgfe' | sed 's/s:\?s*/z/'
efgs:sgfe

在运行Debian Linux的Raspberry Pi上:

$ echo 'efgs:sgfe' | sed 's/s:\?s*/z/'
efgzgfe

这适用于:

$ echo 'efgs:sgfe' | sed 's/s:\{0,1\}s*/z/'
efgzgfe

答案 1 :(得分:1)

在之前添加斜杠?为我做了并将*改为+ - 不确定你是否希望它与第三行匹配。如果这样做,请将“+”更改回“*”。

$ cat crap.txt | sed 's/s:\?s+/z/'
efgzgfe
z
rsts
abc

您拥有的数据位于crap.txt