如何解决Linux RegEx Grep从n到m次重复字符
我对此Linux命令有疑问:
ls | grep -E'i {2,3}'
。该文件应至少包含2个i
和最多3个i
,但不起作用。
这是输出
ls:
life.py,viiva.txt,viiiiiiiiiva.txt
grep:
viiva.txt,viiiiiiiiiva.txt(突出显示的前三个)
感谢您的帮助。
解决方法
OP的尝试问题。grep -E 'i{2,3}'
将匹配输入中任意位置的两到三个连续出现的i
,因此,连续出现4个或更多连续i
也是有效匹配。
不建议解析ls
输出,请参见Why not parse ls
(and what to do instead)?。如果您希望在过滤后将文件名传递给其他命令,则find
是一个不错的选择。
$ ls
1i2i3i.txt aibi.txt II.txt life.py viiiiiiiiiva.txt viiva.txt
$ # files with 2 or 3 consecutive i
$ # note that the regex will act on entire filename,thus anchors are not needed
$ find -type f -regextype egrep -regex '[^i]*i{2,3}[^i]*'
./viiva.txt
$ # files with 2 or 3 i anywhere in the name
$ find -type f -regextype egrep -regex '[^i]*i[^i]*i[^i]*(i[^i]*)?'
./aibi.txt
./1i2i3i.txt
./viiva.txt
$ # files with 2 or 3 i anywhere in the name,ignoring case
$ find -type f -regextype egrep -iregex '[^i]*i[^i]*i[^i]*(i[^i]*)?'
./II.txt
./aibi.txt
./1i2i3i.txt
./viiva.txt
如果文件名不会引起问题,则可以使用上述正则表达式使用grep -xE
或grep -ixE
,其中x
选项将确保正则表达式与整行匹配,而不是线。或者,您也可以使用awk
:
$ # NF will give number of fields after splitting on i
$ ls | awk -F'i' 'NF>=3 && NF<=4'
1i2i3i.txt
aibi.txt
viiva.txt
$ ls | awk -F'[iI]' 'NF>=3 && NF<=4'
1i2i3i.txt
aibi.txt
II.txt
viiva.txt
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。