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

Shell 修改grep结果以打印匹配字符串中的特定单词,shell,grep,Shell,Grep,我有一个grep输出,如下所示: 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

我有一个grep输出,如下所示:

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
我想对其进行如下编辑:

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

这可能吗?

您不需要保留
grep
的管道来生成所需的输出
Awk
grep
有点强大,它允许您对匹配的文本进行转换,这是非常强大的。因此,你所需要的例子就是

awk '/Path to log files/{match($0,/NODE([^/]+)/,a); printf "Node = NODE%s\n",a[1];next}
    /Database is in write suspend state/' file

您不需要保留
grep
的管道来生成所需的输出
Awk
grep
有点强大,它允许您对匹配的文本进行转换,这是非常强大的。因此,你所需要的例子就是

awk '/Path to log files/{match($0,/NODE([^/]+)/,a); printf "Node = NODE%s\n",a[1];next}
    /Database is in write suspend state/' file
使用sed(也可以替换
grep
命令):

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


显示
grep
命令。将另一个管道添加到
grep
的输出中是一个非常糟糕的选择grep-e“数据库处于写挂起状态”-e“日志文件路径”/tmp/dbcfg1。out@Inian把grep放到另一个命令中并没有什么错。@melpomene:我从来没说过什么错。我刚刚声明它可以通过使用twoShow您的
grep
命令在单个命令中完成。将另一个管道添加到
grep
的输出中是一个非常糟糕的选择grep-e“数据库处于写挂起状态”-e“日志文件路径”/tmp/dbcfg1。out@Inian把grep放到另一个命令中并没有什么错。@melpomene:我从来没说过什么错。我只是声称它可以在一个命令中完成,而不是使用两个命令