Sed 不是模式匹配



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

abc12345abc
abc1234567abc
abc123456789abc

我想抓住包含 7 个数字的文件。我需要通过管道使用 sed 来执行此操作。我认为这会起作用:

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

它返回:

abc1234567abc
abc123456789abc

正则表达式不锚定。abc123456789abc有一个正好由 7 位数字组成的字符串,其中实际上是 3 位:123456723456783456789。如果想要不再匹配的文件名,则需要检查前后的非数字。

sed -n '/[^0-9][0-9]{7}[^0-9]/p'

您希望匹配未与另一个数字括起来的七个数字。

您可以使用

sed -En '/(^|[^0-9])[0-9]{7}($|[^0-9])/p'

请参阅在线演示。

  • -E- 启用 POSIX ERE 语法(现在,无需转义{x}区间量词(
  • (^|[^0-9])- 字符串开头或非数字字符
  • [0-9]{7}- 七位数
  • ($|[^0-9])- 字符串结尾或非数字字符。

脚本的第一条规则,不要解析 ls

如果您尝试匹配目录中的文件,请使用find,这就是它的意思

find dir/ -regextype posix-extended -type f 
-regex ".*[^[:digit:]][[:digit:]]{7}[^[:digit:]].*"

这可能对你有用(GNU sed(:

sed '/[0-9]{7}/!d;/[0-9]{8}/d' file

如果没有 7 个连续数字或更多数字,请删除该行。

最新更新