代码之家  ›  专栏  ›  技术社区  ›  codec

修改grep结果以打印匹配字符串中的特定单词

  •  0
  • codec  · 技术社区  · 7 年前

    Path to log files = /data/db2inst1/NODE0000/SQL00001/LOGSTREAM0000/
    Database is in write suspend state = YES
    Path to log files = /data/db2inst1/NODE0001/SQL00001/LOGSTREAM0001/
    Database is in write suspend state = NO
    

    我想编辑如下:

    Node = NODE0000
    Database is in write suspend state = YES
    Node = NODE0001
    Database is in write suspend state = NO
    

    有可能吗?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Inian    7 年前

    你不需要保留 grep 以生成所需的输出。 Awk 格雷普 在某种程度上,它允许您对匹配的文本进行转换,这是非常强大的。因此,你所需要的例子就是

    awk '/Path to log files/{match($0,/NODE([^/]+)/,a); printf "Node = NODE%s\n",a[1];next}
        /Database is in write suspend state/' file
    
        2
  •  0
  •   李伟杰    7 年前
    $  awk -F"/" '{if(NR!=1) if($1 ~ /Path to log files/) print $1,$4 ;else print ;else print "Node = "$4 }' temp
    Node = NODE0000
    Database is in write suspend state = YES
    Path to log files =  NODE0001
    Database is in write suspend state = NO
    
        3
  •  0
  •   oliv    7 年前

    使用sed(也可以替换 grep 命令):

    sed -n '/^Database is in write suspend state/p;
            /^Path to log files = /s|.*/.*\(NODE[0-9]\+\).*/$|Node = \1|p' file