sed不匹配模式

时间:2020-05-19 19:04:40

标签: regex sed

我有一个包含这些文件的目录:

abc12345abc
abc1234567abc
abc123456789abc

我想获取包含7个数字的文件。我需要通过管道使用sed进行此操作。我以为这样可以工作:

ls -l | sed -n '/[0-9]\{7\}/p'

它返回:

abc1234567abc
abc123456789abc

4 个答案:

答案 0 :(得分:1)

不固定正则表达式。 abc123456789abc的字符串完全是7位数字,实际上是3位:123456723456783456789。如果您希望文件名不再匹配,则需要检查之前和之后的数字。

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位或更多,请删除该行。

相关问题