Использование 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