求一正则表达式的解释
-
- 帖子: 104
- 注册时间: 2008-09-10 21:06
求一正则表达式的解释
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”分别代表什么意思呢?
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”分别代表什么意思呢?
- HuntXu
- 帖子: 5776
- 注册时间: 2007-09-29 3:09
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 求一正则表达式的解释
sed 's/^inet.*addr://g;s/Bcast.*$//g' a.txt
即可。s/xxx/XXX/表示把xxx替换成XXX,加g表示globle即全局替换,不加就只替换一个满足条件的。//g就相当于全部删除了。
即可。s/xxx/XXX/表示把xxx替换成XXX,加g表示globle即全局替换,不加就只替换一个满足条件的。//g就相当于全部删除了。
-
- 帖子: 338
- 注册时间: 2008-05-24 1:24
Re: 求一正则表达式的解释
// 表示删除
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
-
- 帖子: 104
- 注册时间: 2008-09-10 21:06
Re: 求一正则表达式的解释
谢谢大家了~~~~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相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!
- haria1988
- 帖子: 689
- 注册时间: 2008-04-17 17:53
- 来自: 江苏.无锡
- 联系:
Re: 求一正则表达式的解释
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相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!

-
- 帖子: 81
- 注册时间: 2007-07-20 10:12
Re: 求一正则表达式的解释
我也写一个解决方法:
gawk -F"[ :]" '/^inet /{print $3}' a.txt
就可以拿到192.168.1.12
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”分别代表什么意思呢?
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
Re: 求一正则表达式的解释
☎ 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哦。不嫌大?
255.255.255.0
用什么awk哦。不嫌大?
● 鸣学
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 求一正则表达式的解释
汗,可不就是我5楼的回答。。。。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相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!
-
- 帖子: 2841
- 注册时间: 2006-09-11 22:47
Re: 求一正则表达式的解释
命令的含义很清楚了,man也很清楚,这段话与英文能力有很大关系么?Dic4000 写了:其实我想说的是,希望那些高手在回答像我们刚接触Linux,两眼发黑啥都不懂的人问题时,请耐心一点,针对问题能多几句解释说明,不要泛泛的回答什么找man。我在发贴前就已经大概查了下man,我英文不好,三级都是很勉强的才过,所以只能借助字典大概的看了看。给出的答案即使是英文也没关系,但不要空谈。就算自己去找,也得有个大概的范围吧?我想发个问题如有人能解释一下原因也可以节约很多时间啊,得出答案后也会再对照man相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!xyywll 写了:// 表示删除
你 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 只需要把分节出来的每个标题瞟看一下就足够,根本没有必要把大段的文字看懂。——这根本不是英文能力问题,是检索自己所需要的信息的问题。