1

команда perl one liner для замены значения в файле проста:

perl  -i  's/oldval/newval/g' file.txt

но каков должен быть синтаксис perl one liner в случае, если мы хотим заменить значение на конкретный параметр (значение после разделителя "="

пример

Мы хотим сопоставить строку VIP_IP и заменить значение после разделителя "=" другим значением как 192.17.200.100 (с синтаксисом perl one liner)

more file.txt

VIP_IP=172.17.200.15

if [[ $VIP_IP = $HOST_IP ]]
then

.
.
.

Ожидаемые результаты

more file.txt

VIP_IP=192.17.200.100

if [[ $VIP_IP = $HOST_IP ]]
then

.
.
.

1 ответ1

3

Изменение IP-адреса

perl -p -i -e 's/VIP_IP=[[:digit:].]+/VIP_IP=192.17.200.100/' file.txt

Или же:

perl -i -pe 's/(VIP_IP=)[[:digit:].]+/${1}192.17.200.100/' file.txt

Или, если новый IP находится в переменной оболочки:

export ip=192.17.200.100
perl -i -pe 's/(VIP_IP=)[[:digit:].]+/${1}$ENV{ip}/' file.txt

Изменение имени

Предположим, наш файл выглядит так:

$ cat file.txt
VIP_IP=192.17.200.100
HOST=James

И предположим, что мы хотим изменить (буквенное) слово после HOST. В таком случае:

export host=Timothy
perl  -pe 's/(HOST=)[[:alpha:]]+/${1}$ENV{host}/' file.txt

Если бы мы хотели изменить буквенно-цифровое слово, в отличие от чисто буквенного слова:

export host=Timothy
perl  -pe 's/(HOST=)[[:alnum:]]+/${1}$ENV{host}/' file.txt

Если мы хотим быть еще менее строгими и изменить любые символы после HOST=:

export host=Timothy
perl  -pe 's/(HOST=).*/${1}$ENV{host}/' file.txt

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