2

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

4 回答 4

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)}'
于 2012-12-28T03:16:36.493 回答
2

我知道你问过,awk但也许你可以试试cut

cut -f4 -d"/"
于 2012-12-28T03:13:15.150 回答
1

或者如何使用grep

$ ... | grep -Po '(?<=ref: refs/changes/[0-9]{2}/)[0-9]+'
206026
206025
206022
于 2012-12-28T14:11:18.840 回答
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':'
于 2015-08-18T20:10:12.493 回答