Regex SED中至少有2个或更多数字的句子
仅使用SED(ubuntu20.4),我需要打印至少有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'/
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