繁体   English   中英

Sed 不是模式匹配

[英]Sed not pattern matching

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

abc12345abc
abc1234567abc
abc123456789abc

我想获取其中包含 7 个数字的文件。 我需要通过 pipe 使用 sed 来执行此操作。 我认为这会起作用:

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

它返回:

abc1234567abc
abc123456789abc

正则表达式没有锚定。 abc123456789abc有一个正好 7 位数字的字符串,其中 3 个实际上34567891234567 、 2345678 和2345678 如果您想要不再匹配的文件名,则需要检查前后的非数字。

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 个连续数字或更多,则删除该行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM