我想使用bash代码从具有如下文本的日志文件中提取某些字符串及其值;
key=DATA&channel=WEB&number=234xxxxxxxxxx
state=MOB&dest=3000&key=SMS&number=234xxxxxxxxxxx
期望的结果应该是;
key=DATA number=234xxxxxxxxxx
key=SMS number=234xxxxxxxxxx
感谢。
答案 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)
您也可以使用参数扩展/子字符串提取从命令行使用read
和printf
执行此操作:
$ ( 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
使用&
分隔数据,然后只打印第一个和最后一个字段。