求教正则表达式高手
-
- 帖子: 307
- 注册时间: 2008-12-01 7:52
- 来自: 蜀山
求教正则表达式高手
我有一个b.txt文件如下
cmdblock@debian:~/dos/bash/test$ cat b.txt
abc 1
abc 20
abc 3 IN
abc 101
我想删除掉 abc 1, abc 20, abc 101,这三个行。执行如下命令
cmdblock@debian:~/dos/bash/test$ cat b.txt | sed '/^abc *[0-9]$/d'
abc 20
abc 3 IN
abc 101
怎么得到的结果不对呢?
这个正则表达式/^abc *[0-9]$/错在哪里?
我对这个正则表达式的理解是:匹配以abc 开头,数字0到9结束的字符串
cmdblock@debian:~/dos/bash/test$ cat b.txt
abc 1
abc 20
abc 3 IN
abc 101
我想删除掉 abc 1, abc 20, abc 101,这三个行。执行如下命令
cmdblock@debian:~/dos/bash/test$ cat b.txt | sed '/^abc *[0-9]$/d'
abc 20
abc 3 IN
abc 101
怎么得到的结果不对呢?
这个正则表达式/^abc *[0-9]$/错在哪里?
我对这个正则表达式的理解是:匹配以abc 开头,数字0到9结束的字符串
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 求教正则表达式高手
代码: 全选
sed '/^abc \+[[:digit:]]\+$/d' b.txt
-
- 帖子: 147
- 注册时间: 2007-10-04 15:23
Re: 求教正则表达式高手
sed -e '/^abc.*[^0-9]$/d' b.txt
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- qq274980
- 帖子: 69
- 注册时间: 2009-04-09 9:16
Re: 求教正则表达式高手
sed '/^abc.*[0-9]$/d'
- qq274980
- 帖子: 69
- 注册时间: 2009-04-09 9:16
Re: 求教正则表达式高手
sed -n '/^abc.*[^0-9]$/p'
- qq274980
- 帖子: 69
- 注册时间: 2009-04-09 9:16
Re: 求教正则表达式高手
grep ^abc | grep -v [0-9]$
- qq274980
- 帖子: 69
- 注册时间: 2009-04-09 9:16
Re: 求教正则表达式高手
grep ^"abc.*[^0-9]$"
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- sevk
- 帖子: 2060
- 注册时间: 2007-05-08 16:26
- 系统: arch
- 来自: 火星内核某分子内某原子核内
- 联系:
Re: 求教正则表达式高手
代码: 全选
irb(main):075:0> a=%Q(abc 1
irb(main):076:0" abc 20
irb(main):077:0" abc 3 IN
irb(main):078:0" abc 101)
=> "abc 1\nabc 20\nabc 3 IN\nabc 101"
irb(main):079:0> puts a; a.each_line{|x| puts x if x !~ /^abc.*\d+$/ )}
abc 1
abc 20
abc 3 IN
abc 101
abc 3 IN
=> "abc 1\nabc 20\nabc 3 IN\nabc 101"
irb(main):080:0> a.each_line{|x| puts x if x !~ /^abc.*\d+$/ )}
abc 3 IN
=> "abc 1\nabc 20\nabc 3 IN\nabc 101"
答案是
代码: 全选
/^abc.*\d+$/
代码: 全选
sed -e 's/.*[0-9]$//' filename
上次由 sevk 在 2009-04-13 11:58,总共编辑 1 次。
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- sevk
- 帖子: 2060
- 注册时间: 2007-05-08 16:26
- 系统: arch
- 来自: 火星内核某分子内某原子核内
- 联系:
Re: 求教正则表达式高手
代码: 全选
sed -e 's/.*[0-9]$//' b.txt
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
- keky
- 帖子: 231
- 注册时间: 2007-12-20 15:08
- 来自: harbin
- 联系:
Re: 求教正则表达式高手
grep '^abc .*[0-9]$' b.txt
-
- 帖子: 307
- 注册时间: 2008-12-01 7:52
- 来自: 蜀山
Re: 求教正则表达式高手
我还是不太明白,空格转义,转了什么义阿?转义不是要用 \ 这个符号吗?eexpress 写了:/^abc *[0-9]$/
空格转义。单数字结束也不对。[0-9]+。至少有一个数字
我觉得它应该匹配abc 232v5,abc sdf9这样的字符串。
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 求教正则表达式高手
“/^abc *[0-9]$/” 匹配的是 “abc 5”、“abc 6” 等这样的字符串,匹配 “abc 232v5”、“abc sdf9” 这样的字符串应该用 “/^abc .*[0-9]$”
其实楼主的问题单靠一个样例文本不能很好的描述清楚,单从楼主的贴子来看,可以有很多种理解:
删除以abc开头以数字结尾的行
删除最后一个词是一个十进制整数的行
删除以数字结尾的行
删除只包含两个词的行
只保留以IN结尾的行
只保留包含三个词的行
只保留第三行
....
其实楼主的问题单靠一个样例文本不能很好的描述清楚,单从楼主的贴子来看,可以有很多种理解:
删除以abc开头以数字结尾的行
删除最后一个词是一个十进制整数的行
删除以数字结尾的行
删除只包含两个词的行
只保留以IN结尾的行
只保留包含三个词的行
只保留第三行
....