我有一个包含这些文件的目录:
abc12345abc
abc1234567abc
abc123456789abc
我想获取包含7个数字的文件。我需要通过管道使用sed进行此操作。我以为这样可以工作:
ls -l | sed -n '/[0-9]\{7\}/p'
它返回:
abc1234567abc
abc123456789abc
答案 0 :(得分:1)
不固定正则表达式。 abc123456789abc
的字符串完全是7位数字,实际上是3位:1234567
,2345678
和3456789
。如果您希望文件名不再匹配,则需要检查之前和之后的数字。
sed -n '/[^0-9][0-9]{7}[^0-9]/p'
答案 1 :(得分:1)
您要匹配未用另一个数字括起来的七个数字。
您可以使用
sed -En '/(^|[^0-9])[0-9]{7}($|[^0-9])/p'
请参见online demo。
详细信息
-E
-启用POSIX ERE语法(现在,无需转义{x}
间隔量词)(^|[^0-9])
-字符串或非数字字符的开头[0-9]{7}
-七位数($|[^0-9])
-字符串结尾或非数字字符。答案 2 :(得分:1)
脚本编写的第一条规则,不要解析ls
如果您要匹配目录中的文件,请使用find
,这就是这个意思
find dir/ -regextype posix-extended -type f \
-regex ".*[^[:digit:]][[:digit:]]{7}[^[:digit:]].*"
答案 3 :(得分:0)
这可能对您有用(GNU sed):
sed '/[0-9]\{7\}/!d;/[0-9]\{8\}/d' file
如果没有连续的7位或更多,请删除该行。