我无法找到我的错误......
我有一个csv文件,其中的行如下:
11;1116209173900;8;4690;000;ÖBB;20090831;20100330;O603;603-Deutschlandsberg;
我想删除O
前面的603
。
我的sed命令如下所示:
sed 's/\(\(.*;\)\{8\}\)O\(.\{3\}\);/\1\2;/g'
但我得到的是
11;1116209173900;8;4690;000;ÖBB;20090831;20100330;20100330;;603-Deutschlandsberg;
我的错误在哪里?
提前谢谢!
答案 0 :(得分:2)
只是一个很小的变化:
sed 's/\(\(.*;\)\{8\}\)O\(.\{3\}\);/\1\3;/'
您有两个级别的括号(\(\(.*;\)\{8\}\)
),即\2
包含.*;
的最后一个匹配。
顺便说一句:出于性能和明确性的原因,我认为最好使用[^;]*
代替.*
:
sed 's/\(\([^;]*;\)\{8\}\)O\(.\{3\}\);/\1\3;/'