只使用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 23:12:51
如果您只想使用sed打印至少包含2位数字的字符串的前2个单词:
sed -nE '/[0-9]{2,}/p' ./yourFile.txt | sed -E 's/^\s*(\S+\s+\S+).*$/\1/'/[0-9]{2,}:至少包含2个digits/^\s*(\S+\s+\S+).*$的字符串:以0或多个空格开头的行,然后捕获一组(1 or many non space char)(1 or many space char)(1 or many non space char),然后捕获任何示例:
输入:
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发布于 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
复制相似问题