首页 > 解决方案 > SED 中至少有 2 个或更多数字的句子

问题描述

仅使用 SED (ubuntu20.4),我需要打印至少有 2 个或更多数字的句子。然后,只打印句子的前两个单词。我能够执行第二部分,但第一个目标,我不知道如何执行。

这是文件:

 ab      c1d
dea   1 a zz7 www44
xy12    abc xyz
xy1 ab XYZ
xy ab X2YZ 3

这就是我到目前为止所做的:

sed -E "s/^[ ]*([^ ]+[ ]+[^ ]+).*/\1/" $* > 123

标签: regexubuntused

解决方案


如果您只想sed打印包含至少 2 个数字的字符串的前 2 个单词:

sed -nE '/[0-9]{2,}/p' ./yourFile.txt | sed -E 's/^\s*(\S+\s+\S+).*$/\1/'
  • /[0-9]{2,}: 至少包含 2 位数字的字符串
  • /^\s*(\S+\s+\S+).*$: 以 0 或多个空格开头的行,然后捕获一组 of(1 or many non space char)(1 or many space char)(1 or many non space char)然后是 any

例子 :

输入 :

 ab      c1d
dea   1 a zz7 www44
xy12    abc xyz
xy1 ab XYZ
xy ab X2YZ 3

输出 :

dea   1
xy12    abc

如果您想摆脱每行前两个单词之间的多空格字符,您可以将其再一次通过管道传输到 sed :

sed -nE '/[0-9]{2,}/p' ./yourFile.txt 
    | sed -E 's/^\s*(\S+\s+\S+).*$/\1/' 
    | sed -E 's/\s+/ /'
  • s/\s+/ /s用于替代,\s+用于捕获所有连续的空格字符,/ /仅用一个空格字符替换它

所以在这种情况下输出将是:

dea 1
xy12 abc

推荐阅读