Basic Regexp Вопрос: Как изменить только строки, начинающиеся с STRING, с помощью sed - PullRequest
3 голосов
/ 25 января 2010

Я должен заменить все вхождения: 5.6xx и 5.5xx (где x - цифра 0-9) в текстовом файле с 5.500, но только когда строка, содержащая совпадение, начинается со строки (например, STARTSTRING). Это значит

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 ]

3 голосов
/ 25 января 2010
sed -i -e '/^STARTSTRING/s/5\.[56][0-9][0-9]/5.500/g' file
1 голос
/ 26 января 2010

вы также можете использовать 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

Обратите внимание, что решения sed не заботятся о числах вроде 35.530.

0 голосов
/ 25 января 2010
sed -i -e '/^STARTSTRING/s/5\.[56][0-9]{2}/5.500/g' $file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...