Команда 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
Пара способов:
Вероятно, самый прямой путь, соответствующий ключ
/Key2/а затем заменитьValue2сValue4:$ sed '/Key2/ s/Value2/Value4/' foo.txt Key1=Value1 Key2=Value4 Key3=Value3Если вы знаете, что цифры придут наконец, и если вы просто хотите заменить эти цифры на что-то другое (здесь замена
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