sed управляют для замены значения в файле конфигурации

Я использую эту команду:

sed -i  's/\(^TestT_STOA_TS1901=\).*/\1N/'/app/test/must/untuio.cf

И я получаю эту ошибку:

XXXXXXXXX:/app/test/must>sed -i  's/\(^TestT_STOA_TS1901=\).*/\1N/'/app/test/must/untuio.cf
sed: -e expression #1, char 33: unknown option to `s'

Почему это происходит? Как я могу заменить значение в файле конфигурации?

2
задан 19 August 2015 в 18:07

3 ответа

Несколько путей:

  1. , Вероятно, самый прямой путь, соответствуя соответствующему ключу /Key2/ и затем заменяя Value2 с Value4:

    $ sed '/Key2/ s/Value2/Value4/' foo.txt 
    Key1=Value1            
    Key2=Value4          
    Key3=Value3
    
  2. , Если Вы знаете, что цифры прибудут наконец и если Вы просто хотите заменить их цифра (цифры) чем-то еще (сюда замена 2 с 4):

    $ sed '/Key2/ s/[[:digit:]]\+$/4/' foo.txt 
    Key1=Value1
    Key2=Value4
    Key3=Value3
    

у меня также есть некоторые другие пути сверху моей головы, но они зависят от Вашего варианта использования. Сообщите нам, были ли они достаточны.

Ваши ошибки в sed -i -e '/KEY=/ s/= .*/= new_value/' /path/to/file:

  • Согласно Вашему примеру, никакой Key будет соответствовать /KEY=/, поскольку это не находится в надлежащих случаях и существует число после того, как Key и = после этого

  • s/= .*/= new_value/, от Вашего примера нет никакого пространства после =, но Ваша замена шаблона кажется, что это имеет пространство в фактическом файле. Иначе насколько Ваш данный пример обеспокоен, что нет никакого пространства после =.

4
ответ дан 2 December 2019 в 01:27

Используйте sed:

sed -i 's/\(^Key2=\).*/\1Value4/' file

Эти -i флаг активируется sed с оперативное редактирование. Это ищет строку, которая начинается Key2= и заменяет строку ключом (\1) сопровождаемый новым значением Value4.

Редактирование :

, Если у Вас есть наклонные черты или другие управляющие символы, используемые в sed, необходимо выйти из них:

sed -i 's/\(^Key2=\).*/\1long\/value\'/with\$many\"strange\^characters/' /path/to/file

Редактирование 2 : В Вашем случае:

sed -i  's/\(^TestT_STOA_TS1901=\).*/\1N/' /app/test/must/untuio.cf
6
ответ дан 2 December 2019 в 01:27

Используя awk? =)

awk -F= '$1=="Key2" {printf "%s=%s\n",$1,"Value4"; next}1' your_input_file
<час>

Пример

входной файл foo

cat foo

Key1=Value1            
Key2=Value2          
Key3=Value3

команда произвела

% awk -F= ' $1=="Key2" {printf "%s=%s\n",$1,"Value4"; next}1' foo
Key1=Value1            
Key2=Value4
Key3=Value3
1
ответ дан 2 December 2019 в 01:27

Другие вопросы по тегам:

Похожие вопросы: