如果我有这样的行: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
提前感谢您的帮助!
答案 0 :(得分:2)
此行应该有效:
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":"")}'
答案 1 :(得分:0)
sed -nr '/^.*(8[4-6]).*(end writing).*$/{s//\1 \2/;p}' job_details.txt