使用sed删除csv文件中的字符

时间:2011-05-09 09:52:26

标签: regex linux sed

我无法找到我的错误......

我有一个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;

我的错误在哪里?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

只是一个很小的变化:

sed 's/\(\(.*;\)\{8\}\)O\(.\{3\}\);/\1\3;/'

您有两个级别的括号(\(\(.*;\)\{8\}\)),即\2包含.*;的最后一个匹配。
顺便说一句:出于性能和明确性的原因,我认为最好使用[^;]*代替.*

sed 's/\(\([^;]*;\)\{8\}\)O\(.\{3\}\);/\1\3;/'