当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求一正则表达式的解释
帖子发表于 : 2008-11-26 0:08 

注册: 2008-09-10 21:06
帖子: 104
送出感谢: 0 次
接收感谢: 0 次
a.txt文件中有三行内容:
Link encap:Ethernet HWaddr 00:51:FD:52:9A:CA
inet addr:192.168.1.12 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::250:fcff:fe22:9acb/64 Scope:Link

在SHELL下用正则表达式取出192.168.1.12这个IP.
cat -n a.txt| grep 'inet ' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

文件中没有g和//这些字符,那么正则表达式里面的这两个“//g”分别代表什么意思呢?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-11-26 0:18 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
代码:
man sed


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-11-26 0:39 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
代码:
grep -oE '^inet addr:[0-9.]+' a.txt | grep -oE '[0-9.]+'


不用这么麻烦


_________________
目前负债150多万


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-11-26 10:50 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
man grep里面就有正则的解释
man regex也有


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-11-26 11:01 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
sed 's/^inet.*addr://g;s/Bcast.*$//g' a.txt
即可。s/xxx/XXX/表示把xxx替换成XXX,加g表示globle即全局替换,不加就只替换一个满足条件的。//g就相当于全部删除了。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-11-26 18:57 

注册: 2008-05-24 1:24
帖子: 338
送出感谢: 0 次
接收感谢: 0 次
// 表示删除


_________________
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-11-28 0:23 

注册: 2008-09-10 21:06
帖子: 104
送出感谢: 0 次
接收感谢: 0 次
xyywll 写道:
// 表示删除


谢谢大家了~~~~
大家都说//是表示删除,其实是错误的。
刚开始我以为//是sed中的什么删除标志选项,可是找了man好久都没找到//表示删除的说明,最后在看到一个正则表达式的例子才恍然大悟。
sed '/s/pattern1/pattern2/‘ a.txt

这个命令是将第一个匹配到的pattern1, 替换为pattern2. 如果想将所有的匹配都替换掉则需要写成

sed '/s/pattern1/pattern2/g‘ a.txt

最后那个字符‘g'是sed命令中的选项,含义是在每个匹配的输入行中, 将每个模式匹配都作相应的操作. (即 不只局限于第一个匹配)

如果pattern2为空的话,命令就变成了
sed '/s/pattern1//g‘ a.txt
意思是把匹配的项都替换成空。这就在第一次接触这个sed命令的人看起来,结果好像是把匹配的都被删除了,还以为//g是sed命令中的某个代表删除的选项。

其实我想说的是,希望那些高手在回答像我们刚接触Linux,两眼发黑啥都不懂的人问题时,请耐心一点,针对问题能多几句解释说明,不要泛泛的回答什么找man。我在发贴前就已经大概查了下man,我英文不好,三级都是很勉强的才过,所以只能借助字典大概的看了看。给出的答案即使是英文也没关系,但不要空谈。就算自己去找,也得有个大概的范围吧?我想发个问题如有人能解释一下原因也可以节约很多时间啊,得出答案后也会再对照man相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-11-28 0:39 
头像

注册: 2008-04-17 17:53
帖子: 689
地址: 江苏.无锡
送出感谢: 0 次
接收感谢: 1
Dic4000 写道:
xyywll 写道:
// 表示删除


谢谢大家了~~~~
大家都说//是表示删除,其实是错误的。
刚开始我以为//是sed中的什么删除标志选项,可是找了man好久都没找到//表示删除的说明,最后在看到一个正则表达式的例子才恍然大悟。
sed '/s/pattern1/pattern2/‘ a.txt

这个命令是将第一个匹配到的pattern1, 替换为pattern2. 如果想将所有的匹配都替换掉则需要写成

sed '/s/pattern1/pattern2/g‘ a.txt

最后那个字符‘g'是sed命令中的选项,含义是在每个匹配的输入行中, 将每个模式匹配都作相应的操作. (即 不只局限于第一个匹配)

如果pattern2为空的话,命令就变成了
sed '/s/pattern1//g‘ a.txt
意思是把匹配的项都替换成空。这就在第一次接触这个sed命令的人看起来,结果好像是把匹配的都被删除了,还以为//g是sed命令中的某个代表删除的选项。

其实我想说的是,希望那些高手在回答像我们刚接触Linux,两眼发黑啥都不懂的人问题时,请耐心一点,针对问题能多几句解释说明,不要泛泛的回答什么找man。我在发贴前就已经大概查了下man,我英文不好,三级都是很勉强的才过,所以只能借助字典大概的看了看。给出的答案即使是英文也没关系,但不要空谈。就算自己去找,也得有个大概的范围吧?我想发个问题如有人能解释一下原因也可以节约很多时间啊,得出答案后也会再对照man相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!

:em11


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-12-04 11:07 

注册: 2007-07-20 10:12
帖子: 81
送出感谢: 0 次
接收感谢: 0 次
我也写一个解决方法:
gawk -F"[ :]" '/^inet /{print $3}' a.txt
就可以拿到192.168.1.12
Dic4000 写道:
a.txt文件中有三行内容:
Link encap:Ethernet HWaddr 00:51:FD:52:9A:CA
inet addr:192.168.1.12 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::250:fcff:fe22:9acb/64 Scope:Link

在SHELL下用正则表达式取出192.168.1.12这个IP.
cat -n a.txt| grep 'inet ' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

文件中没有g和//这些字符,那么正则表达式里面的这两个“//g”分别代表什么意思呢?


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-12-04 11:14 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
☎ i='inet addr:192.168.1.12 Bcast:192.168.1.255 Mask:255.255.255.0'; echo ${i##*Mask:}
255.255.255.0
用什么awk哦。不嫌大?


_________________
● 鸣学


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-12-04 19:15 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
Dic4000 写道:
xyywll 写道:
// 表示删除


谢谢大家了~~~~
大家都说//是表示删除,其实是错误的。
刚开始我以为//是sed中的什么删除标志选项,可是找了man好久都没找到//表示删除的说明,最后在看到一个正则表达式的例子才恍然大悟。
sed '/s/pattern1/pattern2/‘ a.txt

这个命令是将第一个匹配到的pattern1, 替换为pattern2. 如果想将所有的匹配都替换掉则需要写成

sed '/s/pattern1/pattern2/g‘ a.txt

最后那个字符‘g'是sed命令中的选项,含义是在每个匹配的输入行中, 将每个模式匹配都作相应的操作. (即 不只局限于第一个匹配)

如果pattern2为空的话,命令就变成了
sed '/s/pattern1//g‘ a.txt
意思是把匹配的项都替换成空。这就在第一次接触这个sed命令的人看起来,结果好像是把匹配的都被删除了,还以为//g是sed命令中的某个代表删除的选项。

其实我想说的是,希望那些高手在回答像我们刚接触Linux,两眼发黑啥都不懂的人问题时,请耐心一点,针对问题能多几句解释说明,不要泛泛的回答什么找man。我在发贴前就已经大概查了下man,我英文不好,三级都是很勉强的才过,所以只能借助字典大概的看了看。给出的答案即使是英文也没关系,但不要空谈。就算自己去找,也得有个大概的范围吧?我想发个问题如有人能解释一下原因也可以节约很多时间啊,得出答案后也会再对照man相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!

汗,可不就是我5楼的回答。。。。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 求一正则表达式的解释
帖子发表于 : 2008-12-04 19:42 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
Dic4000 写道:
xyywll 写道:
// 表示删除

其实我想说的是,希望那些高手在回答像我们刚接触Linux,两眼发黑啥都不懂的人问题时,请耐心一点,针对问题能多几句解释说明,不要泛泛的回答什么找man。我在发贴前就已经大概查了下man,我英文不好,三级都是很勉强的才过,所以只能借助字典大概的看了看。给出的答案即使是英文也没关系,但不要空谈。就算自己去找,也得有个大概的范围吧?我想发个问题如有人能解释一下原因也可以节约很多时间啊,得出答案后也会再对照man相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!


命令的含义很清楚了,man也很清楚,这段话与英文能力有很大关系么?

你 man 一下 sed,往下翻一点,就这里,第一行就明白了,后面那么一大段不用看

s/regexp/replacement/
Attempt to match regexp against the pattern space. If successful, replace that portion
matched with replacement. The replacement may contain the special character & to refer
to that portion of the pattern space which matched, and the special escapes \1 through
\9 to refer to the corresponding matching sub-expressions in the regexp.

不管是高手或者什么的,不可能把 man 全看懂再去做事情,那样什么都做不了了,而且大多数人英文没到那个程度,可问题是如果只是了解命令的基本使用,对 man 只需要把分节出来的每个标题瞟看一下就足够,根本没有必要把大段的文字看懂。——这根本不是英文能力问题,是检索自己所需要的信息的问题。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译