2016-04-13 3 views
-4

Я ищу способ сделать это с помощью sed или perl. У меня есть файлы, заполненные строки, как это:Заменить конкретную строку другой строкой, если она не содержит период

0,0,0:17 
1,0,0:17 
0,1,0:17 
0,0,1:17 
1,0,1:17 

У меня также есть файлы, заполненные строки, как это:

0,0,-1:17.12 
1,0,-1:17.12 
2,0,-1:17.12 
0,1,-1:17.12 
1,1,-1:17.12 

Я хочу изменить все экземпляры числа 17 в 17.12, но я не» t хотите случайно изменить экземпляры 17.12 на 17.12.12.

Любая помощь?

+0

Вы эффективно с просьбой о регулярном выражении, следующим образом: http://stackoverflow.com/tags/ regex/info, чтобы просмотреть доступные онлайн-инструменты, которые помогут вам быстро протестировать ваш сценарий. – dlamblin

+2

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что область слишком узкая и поможет только одному человеку с определенным регулярным выражением. – dlamblin

ответ

1

С GNU СЭД:

sed 's/:17$/:17.12/' file 

Update: вариант

sed -r 's/:17([^.]|$)/:17.12/' file 

Если вы хотите отредактировать файл "вместо" использовать СЕПГ -i.


См: The Stack Overflow Regular Expressions FAQ

+0

Это не работает для меня. Результат остается в файле «0,0,0: 17». –

+0

Проверьте свой файл для специальных символов: 'cat -A file 'Проверьте наличие пробелов или вкладок после' 17' в вашем файле. – Cyrus

+0

Я обновил свой ответ. – Cyrus

0

Один из способов сделать это с Perl негативного прогнозного утверждения ((?!pattern) см мужчина страницу 'perlre' для более подробной информации):

perl -ple 's/\b17\b(?!\.12\b)/17.12/' file 

Использование

perl -i -ple ... 

для обновления файла.

Это заменит «17» на «17 .12» в любом месте файла, если за ним не следует «.12». Это может быть излишним для этой проблемы, но технику стоит знать.

0

Учитывая, что 17 происходит в конце строки, вы можете прикрепить рисунок там:

s/17$/17.12/ 
Смежные вопросы