使用“awk”在两个其他特定字符串之间查找字符串:

时间:2015-09-08 10:53:01

标签: bash awk grep pipe ksh

我有大量的文字输出,其中包括以下几行:

sending:WHATIWANT:output

我如何使用awk进行制作,以便此输出仅包含每行WHATIWANT

编辑:WHATIWANT之前和之后的文字数量不断变化,因此awk -F: '{print $2}'之类的内容并不总是有效

2 个答案:

答案 0 :(得分:0)

根据你在评论中提到的内容,应该这样做:

perl -n -e'/sending:([^:]+):output/ && print $1' input_file

逐行运行一个简单的正则表达式匹配,捕获有趣的部分然后打印它。它假定WHATIWANT不包含字符:

如果由于某种原因你绝对必须使用awk(1),那么我认为你没有太多选择,只能这样做:

awk -F: '{ for (i = 2; i < NF; i++) if ($(i-1) == "sending" && $(i+1) == "output") print $i }' input_file

它基本上将每一行拆分为:并迭代每个字段,比较左侧和右侧字段,直到找到介于sendingoutput之间的字段。同样,它假设WHATIWANT没有:

答案 1 :(得分:0)

你不能只使用sed吗?

echo "asfasfdsf__sending:WHATIWANT:output__asdfadas" | sed -n 's/.*sending\:\([a-zA-Z0-9]*\)\:output.*/\1/p'

给你“WHATIWANT”