只使用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发布于 2021-01-29 20:18:10
您可以使用
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解决方案中,只返回前两个单词(即第一个和第二个字段),并将其与空格连接。
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保持所有空格不变:
dea 1
xy12 abc
xy abawk只保留一个:
dea 1
xy12 abc
xy abhttps://stackoverflow.com/questions/65954198
复制相似问题