замена собственности sed - PullRequest
       12

замена собственности sed

0 голосов
/ 27 февраля 2012

У меня есть файл свойств, в котором я хочу выполнить замену свойства, поэтому я написал шаблон sed для изменения

host = 1234

с другим значением, но при выполнении

echo "host = 1234" | sed 's/\#*\(host[ \t]*\)\=\([ \t]\d*\)/\1\=\1/g'

Я понял, что замена выполнена (host = host), но атом \ 2 также добавлен в конец строки (1234). Как я могу удалить это?

 `host =host 1234

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Первая проблема в том, что \d не делает то, что вы думаете. Используйте [0-9] как минимум.

Вы все еще получаете host =host, что мне кажется безумным.

EDIT:

Хорошо

echo "host = 1234" | sed 's/#*\host[ \t]*=[ \t]*\([0-9]*\)/host = asdf/g'
  • Зачем захватывать хост, если он всегда один и тот же? Просто перепишите это.
  • Зачем сохранять точную информацию табуляции / пробела? Просто перепишите его.
  • Зачем избегать вещей, которые не являются особенными?

Надеюсь, вы поняли.

Но вот что вы, вероятно, хотите:

sed '/^#/!s/[ \t]*\([^ \t]*\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file

Это изменит anything = anything на anything = newvalue в некомментированных строках input_file. Чтобы сделать его специфическим ключом, который заменяется на newvalue, используйте:

sed '/^#/!s/[ \t]*\(host\)[ \t]*=[ \t]*\([^ \t]*\)/\1 = newvalue/g' input_file

например заменить только строки, читающие host = anything.

0 голосов
/ 27 февраля 2012

Это соответствует вашим потребностям?

echo "host = 1234" | cut -d"=" -f 1

выходы

host

Тогда

echo "host = 1234" | cut -d"=" -f 1 

урожайность

1234
...