удалить символ внутри CSV-файла с помощью Sed - PullRequest
0 голосов
/ 09 мая 2011

Я просто не могу найти свою ошибку ...

У меня есть 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 Ответ

2 голосов
/ 09 мая 2011

Просто очень небольшое изменение:

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

У вас есть два уровня скобок (\(\(.*;\)\{8\}\)), т. Е. \2 содержит последнее совпадение .*;.
Кстати: дляПричины производительности и однозначности Я думаю, что лучше использовать [^;]* вместо .*:

sed 's/\(\([^;]*;\)\{8\}\)O\(.\{3\}\);/\1\3;/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...