Я хочу заменить подстроку в строке, но я не знаю, что это за подстрока. Я знаю, как начинается линия, хотя. Например, DNS1 = [... подлежит замене ....].

Я старался:

sed -i 's/DNS1=*/DNS1="8.8.8.8"/' /etc/sysconfig/network-scripts/ifcfg-eth0

и результат был:

До: DNS1 = "10.10.2.2"

После: DNS1 = "8.8.8.8" "10.10.2.2"

Что я делаю неправильно...

1 ответ1

2

Пытаться:

sed -i 's/DNS1=.*/DNS1="8.8.8.8"/' /etc/sysconfig/network-scripts/ifcfg-eth0

Оператор * означает "соответствовать предыдущему символу 0 или более раз". В вашем примере предыдущий символ равен = , поэтому он будет соответствовать DNS1= и ничего более, поскольку больше нет последовательных символов = , и заменит эту часть на DNS1="8.8.8.8" , которая генерирует строку DNS1="8.8.8.8""10.10.2.2" , как вы и сказали.

. Оператор означает "любой символ" в контексте sed , что, вероятно, здесь вам и нужно. Это изменение будет соответствовать DNS1= а затем "любому символу 0 или более раз" до конца строки, а затем заменить это DNS1="8.8.8.8" .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .