首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SED中至少有2个或更多数字的句子

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

Stack Overflow用户
提问于 2021-01-29 20:08:16
回答 2查看 45关注 0票数 2

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

这是文件:

代码语言:javascript
运行
复制
 ab      c1d
dea   1 a zz7 www44
xy12    abc xyz
xy1 ab XYZ
xy ab X2YZ 3

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

代码语言:javascript
运行
复制
sed -E "s/^[ ]*([^ ]+[ ]+[^ ]+).*/\1/" $* > 123
EN

Stack Overflow用户

发布于 2021-01-29 20:18:10

您可以使用

代码语言:javascript
运行
复制
sed -En '/[0-9][^0-9]*[0-9]/{s/^ *([^ ]+ +[^ ]+).*/\1/p}' file
awk '/[0-9][^0-9]*[0-9]/{print $1" "$2}' file

在这两种情况下,使用/[0-9][^0-9]*[0-9]/正则表达式(数字、除数字之外的任何零个或多个字符、一个数字)检测到至少包含两个数字的行,然后在sed解决方案中,捕获前两个单词,并匹配并删除其余的单词,在awk解决方案中,只返回前两个单词(即第一个和第二个字段),并将其与空格连接。

查看online demo

代码语言:javascript
运行
复制
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}' <<< "$s"
echo "Now, awk..."
awk '/[0-9][^0-9]*[0-9]/{print $1" "$2}' <<< "$s"

两者都返回第一个单词,sed保持所有空格不变:

代码语言:javascript
运行
复制
dea   1
xy12    abc
xy ab

awk只保留一个:

代码语言:javascript
运行
复制
dea 1
xy12 abc
xy ab
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65954198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档