Regex SED中至少有2个或更多数字的句子

Regex SED中至少有2个或更多数字的句子,regex,ubuntu,sed,Regex,Ubuntu,Sed,仅使用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 你可以用 sed-En'/

仅使用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
你可以用

sed-En'/[0-9][^0-9]*[0-9]/{s/^*([^]+[^]+)./\1/p}文件
awk'/[0-9][^0-9]*[0-9]/{print$1”“$2}文件
在这两种情况下,使用
/[0-9][^0-9]*[0-9]/
regex(数字,除数字以外的任何零个或多个字符,一个数字)检测至少有两个数字的行,然后在
sed
解决方案中,捕获前两个字,匹配并删除其余的字,在
awk
解决方案中,仅检测前两个字(即第一个和第二个字段)以空格连接返回

见:

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

sed-En'/[0-9][^0-9]*[0-9]/{s/^([^[:space:]]++[^[:space:]+])./\1/p}'如果您只想使用
sed
打印包含至少两位数字的字符串的前两个字:

sed-nE'/[0-9]{2,}/p./yourFile.txt | sed-E's/^\s*(\s+\s+\s+).$/\1/'
  • /[0-9]{2,}
    :至少包含两位数字的字符串
  • /^\s*(\s+\s+\s+。*$
    :以0或多个空格开头的行,然后捕获一组
    (1或多个非空格字符)(1或多个空格字符)(1或多个非空格字符)
    ,然后捕获任意字符
例如:

输入:

 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+。$/\1/'
|sed-E's/\s+/'
  • s/\s+/
    s
    用于子分区,
    \s+
    用于捕获所有连续的空格字符,
    /
    用于仅用一个空格字符替换它
因此,在这种情况下,输出将为:

dea 1
xy12 abc

嗨,MKLKM-我不太清楚你所说的“我需要打印至少有2个或更多数字的句子”是什么意思。你是在处理现有文本,还是在尝试创建它们?你是指实际的句子,还是仅仅是行?以及“至少有2个数字”,您的意思是在一行中包含两个数字吗?您好,我是否提供了帮助?如果您需要更多澄清,请在答案下方添加注释。请同时添加对您有帮助的任何答案(请参阅)由于您在达到15个代表点后有权获得向上投票的特权。他明确只要求
sed
,因此没有
awk
,但这也很酷:)@SimonDehaut我每天都在看这些
sed
awk
等标签两年多了,我完全同意,但是网络上充斥着sed/awk的混合答案,而且很难找到只有sed的解决方案。如果原始海报需要sed和awk混合解决方案。。。最好用谷歌搜索一下……您不需要使用
sed-E的/\s+/'
(第三个管道
sed
命令)。只需使用sed-E的/^\s*(\s+)\s+(\s+).*$/\1\2/'
即可
dea   1
xy12    abc
dea 1
xy12 abc