如何替換文本文件中的ip地址

sh/bash/dash/ksh/zsh等Shell脚本
回复
tcguangda
帖子: 7
注册时间: 2011-09-02 12:09

如何替換文本文件中的ip地址

#1

帖子 tcguangda » 2012-05-27 0:41

ifconfig

eth0 Link encap:以太网 硬件地址 40:61:86:62:72:b2
inet 地址:192.168.0.168 广播:192.168.0.255 掩码:255.255.255.0
inet6 地址: fe80::4261:86ff:fe62:72b2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:151136 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:140726 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:149009770 (149.0 MB) 发送字节:18440180 (18.4 MB)
中断:45

lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:978 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:978 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:103718 (103.7 KB) 发送字节:103718 (103.7 KB)

ppp0 Link encap:点对点协议
inet 地址:222.175.62.207 点对点:222.175.62.1 掩码:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 跃点数:1
接收数据包:144756 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:130682 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:3
接收字节:140200246 (140.2 MB) 发送字节:14536673 (14.5 MB)

想截取这个命令的输出结果
ppp0 Link encap:点对点协议
inet 地址:222.175.62.207 点对点:222.175.62.1 掩码:255.255.255.255

这个部分的222.175.62.207

然后把222.175.62.207替换到 a文本中 a.b.c.d

对linux命令行一头乌水,呵呵,定向和管道不知道怎么用!
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#2

帖子 枫叶饭团 » 2012-05-27 0:45

grep+sed差不多吧,但是我不怎么会。我可以用py写个,如果你要的话。。。明天再说吧
tcguangda
帖子: 7
注册时间: 2011-09-02 12:09

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#3

帖子 tcguangda » 2012-05-27 1:09

谢谢指点!
头像
royclark
帖子: 301
注册时间: 2011-05-15 1:01
系统: Debian GNU/Linux sid

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#4

帖子 royclark » 2012-05-27 1:19

一个糟糕的实现。 :em02

代码: 全选

ifconfig ppp0 | grep '\<inet\>' | awk '{print $2}' | cut -d ':' -f 2
上面只能打印 ip 。要把它替换 a 中的 a.b.c.d 就不懂了。要是 a 是空的还好办。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#5

帖子 lilydjwg » 2012-05-27 1:34

royclark 写了:一个糟糕的实现。 :em02

代码: 全选

ifconfig ppp0 | grep '\<inet\>' | awk '{print $2}' | cut -d ':' -f 2
上面只能打印 ip 。要把它替换 a 中的 a.b.c.d 就不懂了。要是 a 是空的还好办。
[bash]ifconfig ppp0 | grep '\<inet\>' | awk '{print $2}' | cut -d ':' -f 2 | xargs -I{} sed -i 's/a\.b\.c\.d/{}/' a[/bash]
或者不用 xargs:
[bash]sed -i "s/a\\.b\\.c\\.d/$(ifconfig ppp0 | grep '\<inet\>' | awk '{print $2}' | cut -d ':' -f 2)/" a[/bash]
tcguangda
帖子: 7
注册时间: 2011-09-02 12:09

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#6

帖子 tcguangda » 2012-05-27 1:49

太感谢各位指点了,要好好学习命令行了,真的好厉害!
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#7

帖子 枫叶饭团 » 2012-05-27 1:58

看来是得好好地看看man了
头像
cppking
帖子: 432
注册时间: 2009-09-23 13:35
来自: 中国大陆

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#8

帖子 cppking » 2012-05-27 7:34

royclark 写了:一个糟糕的实现。 :em02

代码: 全选

ifconfig ppp0 | grep '\<inet\>' | awk '{print $2}' | cut -d ':' -f 2
上面只能打印 ip 。要把它替换 a 中的 a.b.c.d 就不懂了。要是 a 是空的还好办。
其实这个命令已经到位了,楼主的意思其实就是把那个IP提取出来,至于格式,就是xxx.xxx.xxx.xxx
他写成a.b.c.d让大家产生了歧义
原来,女生是要追的~~
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#9

帖子 naturalaw » 2012-05-27 13:53

a.b.c.d
是一个ip格式吧。需求不明确,楼主现身吧!
  • The eternal law
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#10

帖子 lilydjwg » 2012-05-27 14:02

cppking 写了:
royclark 写了:一个糟糕的实现。 :em02

代码: 全选

ifconfig ppp0 | grep '\<inet\>' | awk '{print $2}' | cut -d ':' -f 2
上面只能打印 ip 。要把它替换 a 中的 a.b.c.d 就不懂了。要是 a 是空的还好办。
其实这个命令已经到位了,楼主的意思其实就是把那个IP提取出来,至于格式,就是xxx.xxx.xxx.xxx
他写成a.b.c.d让大家产生了歧义
错!不是大家产生了歧义,而是楼主的表述本身有歧义。请不要使用病句,虽然它的后果没有歧义句那么严重。
tcguangda
帖子: 7
注册时间: 2011-09-02 12:09

Re: 请教一下有一件事想用命令来解决,不知道该怎么做!

#11

帖子 tcguangda » 2012-05-27 17:20

不好意思,表述是有点问题

其实是一个命令行文件linux下面配置isatap a.sh,内容如下
sudo ip tunnel del is_sjtu
sudo ip tunnel add is_sjtu mode isatap remote 202.112.26.246 local a.b.c.d
sudo ip link set is_sjtu up
sudo ip tunnel prl prl-default 202.112.26.246 dev is_sjtu
sudo ip -6 route add default via fe80::5efe:202.112.26.246 dev is_sjtu
sudo rdisc6 is_sjtu

因为每次上网拔号ip不一样,就想到替换,看了大家的帮助就直接写成如下就行了

sudo ip tunnel del is_sjtu
sudo ip tunnel add is_sjtu mode isatap remote 202.112.26.246 local $(ifconfig ppp0 | grep '\<inet\>' | awk '{print $2}' | cut -d ':' -f 2)
sudo ip link set is_sjtu up
sudo ip tunnel prl prl-default 202.112.26.246 dev is_sjtu
sudo ip -6 route add default via fe80::5efe:202.112.26.246 dev is_sjtu
sudo rdisc6 is_sjtu
回复