使用 sed 搜索并替换文件中的 IP 地址

发布于 2024-10-21 12:31:58 字数 387 浏览 4 评论 0原文

一直试图让它工作一段时间,但并没有真正得到它。 基本上,我有一个文件,其中的 IP 地址每天或多或少都会发生变化。该文件仅包含一个 ip 地址,而这就是我试图用我疯狂的 grep 替换的地址,以找到我当前的内部 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,而且我也是正则表达式的初学者。

任何帮助都会很棒! 谢谢 :)

Been trying to get this working for a while and not really quite getting it.
Basically, I have a file with an ip address that changes more or less on a daily basis. The file only contains one ip address and this is the one I'm trying to replace with my crazy grepping to find my current internal ip.

I have this

#!/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

but it's not matching and replacing.
I'm not familiar with sed and I am a beginner with regexps too.

Any help would be awesome!
Thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

海拔太高太耀眼 2024-10-28 12:31:58

如果您的 sed 版本支持扩展正则表达式(-r 选项),您可以执行类似的操作(这与您在 grep 中的操作类似) 声明)。另请注意 $newip 位于单引号之外,以允许 shell 替换它。

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

顺便说一句,此解决方案仍然匹配不代表 IP 地址的字符串。请参阅IP 地址下的此网站,了解更复杂的解决方案。

If your version of sed supports extended regular expressions (the -r option), you could do something like this (which is similar to what you have in your grep statement). Also note $newip is outside the single quotes to allow the shell to replace it.

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

BTW this solution still matches strings that do not represent IP addresses. See this site under IP Adresses for more complex solutions.

一身骄傲 2024-10-28 12:31:58
sed -e 's/old ip/new ip/g' filename
sed -e 's/old ip/new ip/g' filename
神妖 2024-10-28 12:31:58
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
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

this validates only four decimal octet representation
so this one will fail 016.067.006.200
(even valid but not four decimal octet representation, but octal)

016.067.006.200 =~ 14.55.6.200
梨涡 2024-10-28 12:31:58

试试这个:

sed -e 's/ \(\([0-9]\{1,3\}\.\)\{1,3\}\).[0-9]/NEW_IP/g'

Try this:

sed -e 's/ \(\([0-9]\{1,3\}\.\)\{1,3\}\).[0-9]/NEW_IP/g'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文