在OSX开始,sed的如下行为:桑达覆盖匹配群体从线OSX
echo -en 'xxx abc\r\nxxx aa bb cc\r\n' | sed -E 's/xxx (.*)/\1->/g'
->c
-> bb cc
虽然我期待下面:
echo -en 'xxx abc\r\nxxx aa bb cc\r\n' | sed -E 's/xxx (.*)/\1->/g'
abc->
aa bb cc->
我只是匹配使用xxx
然后一行把所有其他地方放在我构建的字符串中。它似乎与\r
有关,但我不太清楚如何修复它,而不是先从文本文件中首先修剪\r
。 (上面的例子没有提到任何文本文件,但你可以想象echo
的输出是在一个文本文件中)。
任何解释为什么->
覆盖组匹配?
你想保留'\ r'吗?尝试'sed -E's/\ r //; s/xxx(。*)/ \ 1 - >/g; s/$/\ r /'' – Sundeep
OSX中的文件有这些文件,但我当然不需要'\ r',虽然转储它们会使这些文件在OSX中看起来很糟糕。另外,在你的解决方案中,' - >'也会消掉字符。 – hyiltiz
我在sed(GNU sed)4.2.2'上检查过它,并且它给出了您的预期输出... – Sundeep