awk命令解析grep

时间:2012-12-28 03:10:20

标签: linux unix awk grep

我有以下命令,其输出如下所示,有没有办法写一个awk命令来解析当前输出,只打印下面“预期输出”字段中显示的那些?

ssh -p 29418 company.com gerrit query --commit-message --files --current-patch-set status:open project:platform/vendor/company/radio branch:master |grep refs

当前输出: -

ref: refs/changes/26/206026/1
ref: refs/changes/25/206025/1
ref: refs/changes/22/206022/1

期望的输出: -

206026
206025
206022

4 个答案:

答案 0 :(得分:3)

使用awk:

awk -F'/' '{print $(NF-1)}' input

另一件事是,您可以删除grep并直接使用awk:

ssh -p 29418 company.com gerrit query     \
          --commit-message --files        \
          --current-patch-set status:open \
          project:platform/vendor/company/radio branch:master |
    awk -F'/' '/refs/ {print $(NF-1)}'

答案 1 :(得分:2)

我知道你是awk问的,但也许你可以用cut来试试:

cut -f4 -d"/"

答案 2 :(得分:1)

或者只使用grep

$ ... | grep -Po '(?<=ref: refs/changes/[0-9]{2}/)[0-9]+'
206026
206025
206022

答案 3 :(得分:0)

grep search_string /directory/filename | cut -f1 -d':'

grep查找文件目录中的搜索字符串(即* .c,表示c文件列表)。

grep include */*.c ---除了从包含关键字&#34; include&#34;的所有子目录返回c文件列表外。此命令输出还将包含搜索字符串所在的整行。

例如./tmp/readline-6.2:# include < stdlib.h>这是从grep命令输出的 - 可能有几行输出,每行包含&#34; include&#34;关键字。

要从此输出中获取文件名:

grep include /.c | cut -f1 -d':'