如果我有这样的一行: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