2012-12-28 223 views
2

我有下面的命令,其輸出如下所示,有沒有辦法編寫一個awk命令來解析當前輸出,只打印下面「預期輸出」字段中顯示的命令?awk命令來解析grep

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 
+2

有幾乎沒有任何需要結合'awk'結合使用'grep'。 'grep foo | awk'{cmd}''與'awk'/ foo/{cmd}''相同' –

回答

2

我知道你的awk問,但也許你可以用cut嘗試:

cut -f4 -d"/" 
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)}' 
+2

請記住'awk'可以執行'grep',例如:'... | awk -F'/''/ refs/{print $(NF-1)}'' – Steve

+1

謝謝,我只是偷了這個 – perreal

+0

+1沒問題:-) – Steve

1

或者如何只使用grep

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

的grep對於文件目錄中的搜索字符串(即, * .c,爲c文件列表)。

grep include */*.c ---除了從包含關鍵字「include」的所有子目錄返回c文件列表。此命令輸出還將包含搜索字符串所在的整個行。

例如./tmp/readline-6.2:# include < stdlib.h>這是從grep命令輸出的 - 可能有幾行輸出,每行都包含「include」關鍵字。

要從此輸出得到的只是文件名:

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