Команда 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'

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

3 ответа

Использование sed:

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

-i флаг активируется seds редактирование на месте. Он ищет строку, которая начинается с 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

Пара способов:

  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/, из вашего примера нет места после = но ваша шаблонная подстановка, кажется, имеет место в реальном файле. В противном случае, поскольку ваш приведенный пример не имеет места после =,

С помощью 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
Другие вопросы по тегам