regex - 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
解决方案
如果您只想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
推荐阅读
- c++ - 将结构 A 转换为 B
- java - 如何将底部回收站视图制作为用于突出显示位置的谷歌地图
- python - 表示带有时间序列词嵌入的每日推文语料库
- angular - 如何将角度材质组件转换并使用为 web 元素
- python - Python – 根据存储为字符串变量的 Unicode 名称打印字符
- python - 无法从 Pyspark 中的 Maptype 列中获取值
- node.js - 电子应用 | 带有电子生成器的自定义安装程序
- django - 如何向 Django 中的特定用户发送推送通知?
- aws-lambda - AWS Lambda 扩展:抛出 LaunchError
- javascript - Scrapy Splash 代码刺激点击链接