измените последние две цифры номера с помощью sed - PullRequest
5 голосов
/ 15 марта 2011

Я использую эту команду:

sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\(\r\?\)$/\1/' inputfile

, чтобы изменить мои огромные csv-файлы (см. delete ';' в конце каждой строки ).

Теперь случается, что в некоторых csv-файлах есть «фиктивные даты», такие как 20000500, которые нельзя импортировать в SQL из-за двух последних нулей (которые невозможны для дат).

Как можноЯ редактирую свою команду sed, чтобы всегда изменять последние две цифры на 01 в таких случаях (я имею в виду, только если они равны 00)?

Я пытался

sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\([0-9]{6}\)00;/;\101;/g;s/;\(\r\?\)$/\1/' inputfile

, но это неработа.

1 Ответ

6 голосов
/ 15 марта 2011

Я думаю, {6} - это расширенное регулярное выражение. Поэтому вы должны либо использовать sed -r, либо изменить свое регулярное выражение на s/;\([0-9][0-9][0-9][0-9][0-9][0-9]\)00;/;\101;/g.

Если вы хотите использовать расширенные регулярные выражения, выполните:

sed -r 's/;([0-9]{6})00;/;\101;/g'

Т.е.: вы должны удалить обратную косую черту у паренов.

Редактировать: Что касается комментария Денниса Уильямсона, также возможно использовать регулярные регулярные выражения, избегая фигурных скобок:

sed 's/;\([0-9]\{6\}\)00;/;\101;/g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...