Использование sed для поиска и замены ip-адреса в файле

пытался заставить это работать некоторое время и не совсем понял. В принципе, у меня есть файл с IP-адресом, который меняется более или менее ежедневно. Файл содержит только один ip-адрес, и это тот, который я пытаюсь заменить своим сумасшедшим grepping, чтобы найти мой текущий внутренний ip.

У меня есть это

#!/bin/sh

newip=$(ifconfig | grep 0xfff | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' | grep -v 255)

echo $newip
sed 's/*.*.*.*/"$newip"/g' log.txt > logmod.txt

но он не соответствует и не заменяет. Я не знаком с sed, и я новичок с regexps тоже.

любая помощь было бы здорово! Спасибо :)

2 ответов


если ваша версия sed поддерживает расширенные регулярные выражения (-r опция), вы можете сделать что-то вроде этого (что похоже на то, что у вас есть в вашем grep заявления). Также обратите внимание $newip находится вне одинарных кавычек, чтобы позволить оболочке заменить его.

sed -r 's/(\b[0-9]{1,3}\.){3}[0-9]{1,3}\b'/$newip/

BTW это решение по-прежнему соответствует строкам, которые не представляют IP-адреса. См.этот сайт под IP-адресов для более сложных решений.


IP=207.0.0.2; [[ x${IP}x =~ x"(2([0-4][0-9])|2(5[0-5])|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(2([0-4][0-9])|2(5[0-5])|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(2([0-4][0-9])|2(5[0-5])|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(2([0-4][0-9])|2(5[0-5])|1[0-9][0-9]|[1-9][0-9]|[0-9])"x ]] && echo ok || echo bad

это проверяет только четыре десятичных октета представление так что это не удастся 016.067.006.200 (даже допустимое, но не десятичное октетное представление, а восьмеричное)

016.067.006.200 =~ 14.55.6.200