使用bash脚本从文件中提取特定字符串

时间:2015-04-14 02:21:21

标签: regex string bash awk

我想使用bash代码从具有如下文本的日志文件中提取某些字符串及其值;

key=DATA&channel=WEB&number=234xxxxxxxxxx
state=MOB&dest=3000&key=SMS&number=234xxxxxxxxxxx

期望的结果应该是;

key=DATA number=234xxxxxxxxxx
key=SMS  number=234xxxxxxxxxx

感谢。

3 个答案:

答案 0 :(得分:2)

你可以使用grep。

grep -o '\b\(key\|number\)=[^&]*' file | paste - -

awk -F'&' '{for(i=1;i<=NF;i++)if($i~/^key|number/) print $i}' file | paste - -

答案 1 :(得分:0)

您也可以使用参数扩展/子字符串提取从命令行使用readprintf执行此操作:

$ ( while read -r line; do printf "%-10s  %s\n" "${line%%&*}" "${line##*&}"; done < dat/keyval.log )
key=DATA    number=234xxxxxxxxxx
state=MOB   number=234xxxxxxxxxxx

注意:在上面的子shell中运行,但您也可以在没有子shell的情况下运行它。

答案 2 :(得分:0)

这应该做:

awk -F\& '{print $1,$NF}' file
key=DATA number=234xxxxxxxxxx
state=MOB number=234xxxxxxxxxxx

使用&分隔数据,然后只打印第一个和最后一个字段。