Я использую эту команду:
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'
Почему это происходит? Как я могу заменить значение в файле конфигурации?
Несколько путей:
, Вероятно, самый прямой путь, соответствуя соответствующему ключу /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/
, от Вашего примера нет никакого пространства после =
, но Ваша замена шаблона кажется, что это имеет пространство в фактическом файле. Иначе насколько Ваш данный пример обеспокоен, что нет никакого пространства после =
.
Используйте 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
Используя 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