我有以下命令,其输出如下所示,有没有办法写一个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
答案 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':'