Использование sed для поиска и замены IP-адреса в файле - PullRequest
7 голосов
/ 11 марта 2011

Я пытался заставить это работать некоторое время и не совсем понял. По сути, у меня есть файл с IP-адресом, который меняется более или менее ежедневно. Файл содержит только один IP-адрес, и это тот, который я пытаюсь заменить своим сумасшедшим подсчетом, чтобы найти мой текущий внутренний 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, и я тоже новичок в регулярных выражениях.

Любая помощь будет потрясающей! Спасибо:)

Ответы [ 2 ]

13 голосов
/ 11 марта 2011

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

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

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

1 голос
/ 16 сентября 2011
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
...