sed игнорировать строку, начинающуюся с регулярного выражения - PullRequest
4 голосов
/ 20 марта 2012

Я пытаюсь заменить свойства файла свойств, используя sed в сценарии оболочки;перечисленная ниже команда прекрасно работает

sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

Проблема - этот парень также заменяет "КЛЮЧ" в комментариях.

пример файла:

###########
#ws.clients=http://abc123.com
ws.clients=http://123.com
###########

script:

#!/bin/ksh
KEY="ws.clients"
NEWVAL="http://abcd.com"
sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

вывод:

###########
#ws.clients=http://abcd.com
ws.clients=http://abcd.com
###########

Я пробовал несколько способов, но не смог выйти из строки, начинающейся с "#" ... Предложения?

Ответы [ 2 ]

5 голосов
/ 20 марта 2012

Вы можете добавить условие к выражению замены:

sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

/^[^#]/ читается как «все , но знак фунта в начале строки».

0 голосов
/ 20 марта 2012

Вы можете сделать это

sed "s!^${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

Только что добавили ^, так что совпадают только те, которые начинаются с начала строки. Значительно выше, ответ также должен работать, но это будет иметь ту же проблему, если ваша строка начинается с space.

...