【问题标题】:Shell script to match a string and print the next string on aix machine用于匹配字符串并在 aix 机器上打印下一个字符串的 Shell 脚本
【发布时间】:2017-12-03 09:53:32
【问题描述】:

我有以下一行作为输入。

Parsing events:hostname='tom';Ipaddress='10.10.10.1';situation_name='sgd_abc_app_a';type='General';

这样,一行中有许多字段,由分号分隔符分隔。 (但从解析事件开始:)

我只想在sgd_abc_app_a 匹配situation_name 时提取它。

谢谢 库利

【问题讨论】:

  • Parsing Events: 是放在单独的一行吗?
  • @RomanPerekhrest 号。它在同一行。

标签: shell unix aix


【解决方案1】:

awk解决方案:

s="Parsing events: hostname='tom';Ipaddress='10.10.10.1';situation_name='sgd_abc_app_a';type='General';"
awk -F'[=;]' '{ gsub("\047","",$6); print $6 }' <<< $s

或者使用 sed:

sed -n "s/^Parsing events:.*situation_name='\([^']*\).*/\1/p" <<< $s

输出:

sgd_abc_app_a

【讨论】:

  • 但是对于文件中的某些行,situation_name 的位置不同。这段代码仍然有效吗?
  • 您应该添加更多上下文行以显示 situation_name 在文件中某些行的不同位置
  • 无法真正预测位置,因为它有数千行。但它以 Parsing Events: 开头,以 END 结尾;而situation_name 可能出现在这两者之间的任何地方。
  • @Kulli,使用我的 sed 方法
【解决方案2】:

根据您的要求,无论situation_name的位置如何,都可以使用

$ awk '/situation_name/{match($0,/situation_name=[^;]+/); print substr($0,RSTART+16,RLENGTH-17)}' file
sgd_abc_app_a

【讨论】:

    【解决方案3】:

    试试

    sed -n 's/^.*situation_name=//p' input_file| awk -F "'" '{print $2}'
    

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2017-03-01
      • 2019-09-03
      • 2012-09-11
      相关资源
      最近更新 更多