如何在一行中查找模式并使用UNIX sed打印结果?

时间:2013-05-23 09:31:27

标签: unix sed

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

提前感谢您的帮助!

2 个答案:

答案 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