【问题标题】:Extracting specific strings from a file using bash script使用 bash 脚本从文件中提取特定字符串
【发布时间】:2015-06-19 12:27:36
【问题描述】:

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

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

期望的结果应该是;

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

谢谢。

【问题讨论】:

  • @mjuares,我尝试了以下方法; awk -F "&" '{OFS = "\n"; print $1,$2,$3,$4,$5}' | grep -E 'key|number' <filename>

标签: regex string bash awk


【解决方案1】:

你可以使用 grep。

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

或

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

【讨论】:

  • 谢谢,但我最初想要的输出有一个错误。我想捕获实际的键值。
  • 非常感谢。标记您的答案和接受的答案。
【解决方案2】:

您也可以使用参数扩展/子字符串提取从命令行使用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的情况下运行它。

【讨论】:

    【解决方案3】:

    应该这样做:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-04
      • 2021-03-10
      • 2014-12-14
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多