Замените IP используя sed или awk из xml, который содержит квадратные скобки - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть этот код, который хотел бы изменить IP-адрес с:

<mailHost>[10.237.30.150]:25</mailHost>

и мне нужно сменить на другой IP: Ожидаемый результат:

<mailHost>[10.237.30.151]:25</mailHost>

Вот что я пробовал, но все равно выдает ошибку и ничего не меняет.

sed -n "/<mailHost>/ {s/10.237.30.150/10.237.30.151/}" file

Любая подсказка будет очень кстати :) Спасибо.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018
sed -i "s/10.237.30.150/10.237.30.151/g" file

Это не будет работать?

0 голосов
/ 30 апреля 2018

Ваш вопрос неясен (пытаетесь ли вы заменить какой-либо IP-адрес везде, где это происходит, или просто этот конкретный IP-адрес, или этот конкретный IP-адрес только в этом контексте, или любой IP-адрес в этом контексте или что-то еще?), Но это может будь что хочешь:

$ sed 's/\(<mailHost>\[\)[^]]*/\110.237.30.151/' file
<mailHost>[10.237.30.151]:25</mailHost>
0 голосов
/ 30 апреля 2018

После awk может помочь вам в том же.

awk -v value="new_value" '/mailHost/{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/);val=substr($0,RSTART,RLENGTH);if(val){print substr($0,1,RSTART-1) value substr($0,RSTART+RLENGTH);next}} 1'  Input_file

Если вы хотите внести изменения в сам файл Input_file, добавьте следующую команду: > temp_file && mv temp_file Input_file.

Теперь добавлена ​​форма объяснения не одним вкладышем.

awk -v value="new_value" '
/mailHost/{
    match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/);
    val=substr($0,RSTART,RLENGTH);
    if(val){
       print substr($0,1,RSTART-1) value substr($0,RSTART+RLENGTH);
       next}
}
1'   Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...