【问题标题】:Extract string based on pattern in shell script根据shell脚本中的模式提取字符串
【发布时间】:2021-09-25 04:07:11
【问题描述】:

我正在编写一个脚本并停留在必须根据模式提取字符串的地方。 我曾尝试使用 awk 和 cut 但无法获得正确的结果。

这是我文件中的 3 行,我希望提取倒数第​​二列

预期输出

  1. MxMonitor_Marvel_PI49
  2. alert_manager
  3. MxMonitor_Marvel_PI49

我尝试了以下最接近我得到的,但它只提取了几行而不是全部。

awk  -F"," '{print $10}' Filename.txt

文件内容

./subsearch_nested_fa89eeb0810630b9_1626351940.6/metadata.csv:2:"read : [ admin ], write : [ admin ]",admin,"MxMonitor_Marvel_PI49",300
./scheduler__nobody_YWxlcnRfbWFuYWdlcg__RMD5922da96313b0bb40_at_1626282000_20762/metadata.csv:2:"read : [ splunk-system-user ], write : [ splunk-system-user ]","splunk-system-user","alert_manager",86400
./subsearch_admin__admin_TXhNb25pdG9yX01hcnZlbF9QSTQ5__search12_1626351937.20757776_1626351938.1/metadata.csv:2:"read : [ admin ], write : [ admin ]",admin,"MxMonitor_Marvel_PI49",300

【问题讨论】:

    标签: shell awk cut


    【解决方案1】:
    $ awk -F'"' '{print $(NF-1)}' file
    MxMonitor_Marvel_PI49
    alert_manager
    MxMonitor_Marvel_PI49
    

    【讨论】:

      【解决方案2】:

      你可以试试这个更短的awk

      awk '{gsub(/^.*,"|",.*/, "")} 1' file
      
      MxMonitor_Marvel_PI49
      alert_manager
      MxMonitor_Marvel_PI49
      

      如此相似sed:

      sed -E 's/^.*,"|",.*//g' file
      

      【讨论】:

        【解决方案3】:

        使用您显示的示例,请尝试以下代码。将字段分隔符设置为,,并从倒数第二个字段中删除开始、结束",最后打印出来。

        awk -F, '{gsub(/^"|"$/,"",$(NF-1));print $(NF-1)}' Input_file
        

        【讨论】:

          【解决方案4】:

          如果字段分隔符是逗号并且值可以选择用双引号括起来,对于示例数据,您可以使用"?,"?将字段分隔符设置为可选双引号之间的逗号

          awk -F '"?,"?' '{print $(NF-1)}' file
          

          输出

          MxMonitor_Marvel_PI49
          alert_manager
          MxMonitor_Marvel_PI49
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-14
            • 2013-06-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-12
            • 2020-03-08
            相关资源
            最近更新 更多