分页: 1 / 2
求教正则表达式高手
发表于 : 2009-04-13 5:57
由 cmdblock
我有一个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结束的字符串
Re: 求教正则表达式高手
发表于 : 2009-04-13 6:09
由 aerofox
代码: 全选
sed '/^abc \+[[:digit:]]\+$/d' b.txt
Re: 求教正则表达式高手
发表于 : 2009-04-13 8:21
由 a0147520
sed -e '/^abc.*[^0-9]$/d' b.txt
Re: 求教正则表达式高手
发表于 : 2009-04-13 9:45
由 eexpress
/^abc *[0-9]$/
空格转义。单数字结束也不对。[0-9]+。至少有一个数字
Re: 求教正则表达式高手
发表于 : 2009-04-13 10:20
由 qq274980
sed '/^abc.*[0-9]$/d'
Re: 求教正则表达式高手
发表于 : 2009-04-13 10:22
由 qq274980
sed -n '/^abc.*[^0-9]$/p'
Re: 求教正则表达式高手
发表于 : 2009-04-13 10:23
由 qq274980
grep ^abc | grep -v [0-9]$
Re: 求教正则表达式高手
发表于 : 2009-04-13 10:23
由 qq274980
grep ^"abc.*[^0-9]$"
Re: 求教正则表达式高手
发表于 : 2009-04-13 10:24
由 eexpress
qq274980 写了:sed '/^abc.*[0-9]$/d'
匹配abcnnnnd0

Re: 求教正则表达式高手
发表于 : 2009-04-13 10:49
由 sevk
代码: 全选
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"
答案是
代码: 全选
sed -e 's/.*[0-9]$//' filename
Re: 求教正则表达式高手
发表于 : 2009-04-13 11:21
由 eexpress
sevk, 说过.*不对的。还来。sed这里没支持非贪婪匹配的?的。
/^abc\ \d+$/
Re: 求教正则表达式高手
发表于 : 2009-04-13 11:59
由 sevk
代码: 全选
sed -e 's/.*[0-9]$//' b.txt
Re: 求教正则表达式高手
发表于 : 2009-04-13 20:42
由 keky
grep '^abc .*[0-9]$' b.txt
Re: 求教正则表达式高手
发表于 : 2009-04-14 0:04
由 cmdblock
eexpress 写了:/^abc *[0-9]$/
空格转义。单数字结束也不对。[0-9]+。至少有一个数字
我还是不太明白,空格转义,转了什么义阿?转义不是要用 \ 这个符号吗?
我觉得它应该匹配abc 232v5,abc sdf9这样的字符串。
Re: 求教正则表达式高手
发表于 : 2009-04-14 6:10
由 aerofox
“/^abc *[0-9]$/” 匹配的是 “abc 5”、“abc 6” 等这样的字符串,匹配 “abc 232v5”、“abc sdf9” 这样的字符串应该用 “/^abc .*[0-9]$”
其实楼主的问题单靠一个样例文本不能很好的描述清楚,单从楼主的贴子来看,可以有很多种理解:
删除以abc开头以数字结尾的行
删除最后一个词是一个十进制整数的行
删除以数字结尾的行
删除只包含两个词的行
只保留以IN结尾的行
只保留包含三个词的行
只保留第三行
....