分页: 1 / 1
求一正则表达式的解释
发表于 : 2008-11-26 0:08
由 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”分别代表什么意思呢?
Re: 求一正则表达式的解释
发表于 : 2008-11-26 0:18
由 HuntXu
Re: 求一正则表达式的解释
发表于 : 2008-11-26 0:39
由 xhy
代码: 全选
grep -oE '^inet addr:[0-9.]+' a.txt | grep -oE '[0-9.]+'
不用这么麻烦
Re: 求一正则表达式的解释
发表于 : 2008-11-26 10:50
由 eexpress
man grep里面就有正则的解释
man regex也有
Re: 求一正则表达式的解释
发表于 : 2008-11-26 11:01
由 xiooli
sed 's/^inet.*addr://g;s/Bcast.*$//g' a.txt
即可。s/xxx/XXX/表示把xxx替换成XXX,加g表示globle即全局替换,不加就只替换一个满足条件的。//g就相当于全部删除了。
Re: 求一正则表达式的解释
发表于 : 2008-11-26 18:57
由 xyywll
// 表示删除
Re: 求一正则表达式的解释
发表于 : 2008-11-28 0:23
由 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相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!
Re: 求一正则表达式的解释
发表于 : 2008-11-28 0:39
由 haria1988
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相关的条目看一看也不错。如果我说的过火,请那些高手不要在意。 ^_^!

Re: 求一正则表达式的解释
发表于 : 2008-12-04 11:07
由 lujinke
我也写一个解决方法:
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”分别代表什么意思呢?
Re: 求一正则表达式的解释
发表于 : 2008-12-04 11:14
由 eexpress
☎ 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哦。不嫌大?
Re: 求一正则表达式的解释
发表于 : 2008-12-04 19:15
由 xiooli
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楼的回答。。。。
Re: 求一正则表达式的解释
发表于 : 2008-12-04 19:42
由 poet
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 只需要把分节出来的每个标题瞟看一下就足够,根本没有必要把大段的文字看懂。——这根本不是英文能力问题,是检索自己所需要的信息的问题。