2010-01-25 7 views
3

Мне нужно заменить все осколки: 5.6xx и 5.5xx (где x - 0-9 цифр) в текстовом файле с 5.500, но только когда строка, содержащая совпадение, начинается со строки (например, STARTSTRING). Это означает, чтоBasic Regexp Вопрос: Как изменить только строки, начинающиеся с STRING с помощью sed

STARTSTRING 5.610 4.500 3.550 5.530 
OTHERSTRING 5.600 5.500 5.500 5.600 

должен стать

STARTSTRING 5.500 4.500 3.550 5.500 
OTHERSTRING 5.600 5.500 5.500 5.600 

Я не знаю, как я могу это сделать. Я использую sed для редактирования.

Большое спасибо! :)

PS: При необходимости я запускаю последнюю версию debian.

ответ

3
sed -i -e '/^STARTSTRING/s/5\.[56][0-9][0-9]/5.500/g' file 
+0

Это именно то, что я искал. Большое спасибо :) –

+0

Нет проблем. Удачи! –

+0

Возможно, вам стоит поставить границу в случае появления чисел, таких как 35.530, и вы не хотите это менять. – ghostdog74

0
sed -i -e '/^STARTSTRING/s/5\.[56][0-9]{2}/5.500/g' $file 
+0

Ваш не делает то, о чем попросил ОП. –

+0

Действительно, неправильно прочитал его, сосредоточившись только на сопоставлении только определенных строк, исправлено – wich

1

вы можете использовать AWK, а

$ cat file 
STARTSTRING 5.610 4.500 3.550 5.530 35.530 
OTHERSTRING 5.600 5.500 5.500 5.600 35.500 

$ awk '/STARTSTRING/{ for(i=1;i<=NF;i++) if($i ~/^5\.[56][0-9][0-9]/) $i="5.500"} 1 ' file 
STARTSTRING 5.500 4.500 3.550 5.500 35.530 
OTHERSTRING 5.600 5.500 5.500 5.600 35.500 

Обратите внимание, что СЕПГ решения не заботиться о числах как 35.530.

 Смежные вопросы

  • Нет связанных вопросов^_^