【问题标题】:Match pattern in line using grep [closed]使用 grep 匹配模式 [关闭]
【发布时间】:2016-07-01 00:05:01
【问题描述】:

我需要用逗号分隔值的文件中的 grep 行,并将输出定向到另一个文件。因此,如果第二个值以 'U' 开头并且最后一个值是 'Success',则此行与模式匹配。

应该匹配模式:

324,U63@DOM1,U63@DOM1,C1755,C1755,Kerberos,Network,LogOn,Success

应该匹配失败:

456,C1164$@DOM1,C1164$@DOM1,C625,C625,?,Network,LogOff,Success
123,U63@DOM1,C11847$@?,C2109,C2109,?,?,TGT,Fail

谢谢!

【问题讨论】:

  • 你试过什么?这不是用于编写程序的服务,因为您不想这样做。
  • ^[^,]+,U.*Success$
  • @Natecat:注意+ 需要grep -E(又名egrep)。
  • 谢谢@jonathan。这行得通!
  • 一定要grep吗?如果您使用awk,这似乎会更清楚。

标签: linux shell command-line grep


【解决方案1】:

随着列匹配要求变得更加复杂,awk 解决方案变得更具吸引力:

awk -F, '$2 ~ /^U/ && $(NF) == "Success"'

(匹配的默认动作是打印该行。)

这里是使用grep 的解决方案:

grep '^[^,]*,U.*,Success$'

还有sed:

sed '/^[^,]*,U.*,Success$/ p; d'

【讨论】:

    【解决方案2】:
    grep '^[^,]*,U.*,Success$'
    

    查找第一个逗号 U,最后一个逗号 Success 和行尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多