0

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

在此先感谢您的帮助!

4

2 回答 2

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":"")}'
于 2013-05-23T09:39:21.933 回答
0
 sed -nr '/^.*(8[4-6]).*(end writing).*$/{s//\1 \2/;p}' job_details.txt
于 2013-05-23T10:00:03.367 回答