Chinaunix
标题:
正则问题--包含abc但不能包含abc后面的xyz
[打印本页]
作者:
勒色
时间:
2012-06-26 16:58
标题:
正则问题--包含abc但不能包含abc后面的xyz
本帖最后由 勒色 于 2012-06-26 17:08 编辑
请教一个正则表达式的问题,我不知道正则表达式的问题发到这里是不是合适,如果发错,请管理员帮忙移动吧,谢谢。
我希望输出包含abc的行,但是abc后面不能包含xyz,abc前面是否包含xyz不限制。
原文:
123
abc
3456
adfad
abc
adfadf
xyz
35rf-mhusabc9ke8qdnca
abc
_
xyz
ienmadnfd
adaqwtrqwerzcvsgyq4teaf
123413513598458923
!$@&#($)$^^&*(*^%$#@@
23
xyz
dafig
abc
e931
希望输出:
123
abc
3456
35rf-mhus
abc
9ke8qdnca
23
xyz
dafig
abc
e931
多谢各位了。
作者:
jiaogeshahaone
时间:
2012-06-26 17:02
回复
1#
勒色
abc_defienmadnfd
也不要?
作者:
勒色
时间:
2012-06-26 17:05
本帖最后由 勒色 于 2012-06-26 17:06 编辑
回复
2#
jiaogeshahaone
对,只要abc后面包含了zyz就不要
不好意思,前面我的原文帖的有问题,现在已经修改了
作者:
personball
时间:
2012-06-26 17:09
personball@vostro:SHELL$cat file
123abc3456
adfadabcadfadfxyz
35rf-mhusabc9ke8qdnca
abc_xyzienmadnfd
adaqwtrqwerzcvsgyq4teaf
123413513598458923
!$@&#($)$^^&*(*^%$#@@
23xyzdafigabce931
personball@vostro:SHELL$grep "abc" file|grep -v -E "abc.*xyz+"
123abc3456
35rf-mhusabc9ke8qdnca
23xyzdafigabce931
复制代码
作者:
勒色
时间:
2012-06-26 17:17
有没有办法写成一个正则表达式?我是希望用在代码里面的。
研究了好久,我大概(abc).*(?!xyz).*?这样的思路,但是最终我没有实现
作者:
ziyunfei
时间:
2012-06-26 18:55
本帖最后由 ziyunfei 于 2012-06-26 18:57 编辑
grep -P 'abc(.(?!xyz))*$'
复制代码
作者:
rdcwayx
时间:
2012-06-26 19:46
本帖最后由 rdcwayx 于 2012-06-26 19:46 编辑
awk '/abc/&&!/abc.*xyz/' infile
复制代码
作者:
勒色
时间:
2012-06-26 20:17
发现必须要使用特定的语言环境下的正则表达式,多谢各位了
作者:
勒色
时间:
2012-06-26 20:19
我打算再研究下,有没有不依赖语言的正则表达式写法。
现在正在研究Expresso这个工具
作者:
qishking
时间:
2012-06-26 21:50
QQ截图20120626214329.jpg
(18.87 KB, 下载次数: 7)
下载附件
2012-06-26 21:49 上传
为什么屏幕上没有输出,重定向到文件却有内容?
作者:
cdtits
时间:
2012-06-26 21:56
本帖最后由 cdtits 于 2012-06-26 21:56 编辑
cat asdf.txt | perl -ne 'print if /abc(.(?!xyz))*\b/'
作者:
yinyuemi
时间:
2012-06-26 22:15
回复
1#
勒色
建议用awk
awk -vFS="abc" '$2!~/xyz/&&NF==2'
复制代码
作者:
lmzopq
时间:
2012-06-26 23:25
abc(?!.*xyz.*)
作者:
abcd5610
时间:
2012-06-27 10:16
回复
4#
personball
"abc.*xyz+" 的.是什么意思 求解惑。。。。
作者:
personball
时间:
2012-06-27 10:24
回复
14#
abcd5610
正则表达式相关资料随便查查就知道了
给你个百度百科传送门:
http://baike.baidu.com/view/94238.htm
作者:
freeterman
时间:
2012-06-27 10:39
grep -P '.*abc.*(?!xyz).*' infile
这个测试一下
结果:
[root@localhost ~]# grep -P '.*abc.*(?!xyz).*' txt
123abc3456
adfadabcadfadfxyz
35rf-mhusabc9ke8qdnca
abc_xyzienmadnfd
23xyzdafigabce931
personball@vostro:SHELL$grep "abc" file|grep -v -E "abc.*xyz+"
123abc3456
35rf-mhusabc9ke8qdnca
23xyzdafigabce931
作者:
abcd5610
时间:
2012-06-27 10:51
回复
15#
personball
.*是不是就是匹配任意个的单个字符呢?
作者:
cjaizss
时间:
2012-06-27 11:08
标准的正则表达式写不出,perl的据说可以写
作者:
sunceenjoy
时间:
2012-06-27 11:33
我也弄一下:
sed -re -n '/abc/{/abc.*xyz/!p}' 2.txt
作者:
xiaowh00
时间:
2012-06-27 12:03
不知道这是不是你要的,最近在看《Mastering.Regular.Expressions》
[root@pt10 ~]# grep -P 'abc(?!.*xyz)' a --color
123abc3456
35rf-mhusabc9ke8qdnca
23xyzdafigabce931
[root@pt10 ~]#
[root@pt10 ~]# cat a
123abc3456
adfadabcadfadfxyz
35rf-mhusabc9ke8qdnca
abc_xyzienmadnfd
adaqwtrqwerzcvsgyq4teaf
123413513598458923
!$@&#($)$^^&*(*^%$#@@
23xyzdafigabce931
回复
1#
勒色
作者:
freeterman
时间:
2012-06-27 12:36
上面搞错了
应该是grep -P 'abc(.(?!xyz))*$' txt
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2