如果我有这样的一行:1300397,0,3,86,some more text here,end writing, another string here
并且我只想显示86 end writing
,我该如何使用 sed 来做到这一点?
到目前为止,我有这个:sed 's/.*\(8[4-6]\).*/\1/' job_details.txt
它只显示86
. 如何包含end writing
字符串?
期望的结果:
86 end writing
在此先感谢您的帮助!
这条线应该工作:
awk -F, '{for(x=1;x<=NF;x++)f=$x~/^8[4-6]$/?$x:f;print f,$NF}'
请注意,上面的行检查字段/列是否等于 8[4-6]
. 例如,86
将被打印,但88886 or foo86bar or 8622222
不会被打印。如果您只想检查列是否包含 从单行中8[4-6]
删除。^ and $
用你的例子:
kent$ echo "1300397,0,3,86,some more text here,end writing"|awk -F, '{for(x=1;x<=NF;x++)f=$x~/^8[4-6]$/?$x:f;print f,$NF}'
86 end writing
编辑
尝试这个:
awk -F, '{for(x=1;x<=NF;x++){f=$x~/^8[4-6]$/?$x:f;e=e?e:$x=="end writing"}print f, (e?"end writing":"")}'
sed -nr '/^.*(8[4-6]).*(end writing).*$/{s//\1 \2/;p}' job_details.txt