是否可以 grep 输出的两个特定内容?

是否可以 grep 输出的两个特定内容?

我正在使用 Transmission-remote 查看正在运行的种子列表。

使用transmission-remote -l以下结果时:

ID  Done    Have  ETA     Up    Down  Ratio Status Name

1   100%    10GB  Done    0.0   0.0   0.0   Idle   Torrent

Sum: 15.91 GB    0.0     0.0

我能找出 torrent 的百分比和名称吗?

目前我有以下内容: transmission-remote -l | grep -o -P '.{0,3}%'

这将返回100%

答案1

不知道如何用 grep 做到这一点,但有一个简单的解决方案awk

仅适用于列表中的第一个 torrent:

transmission-remote -l | awk '{if (NR == 3) {print $2, $9}} '

对于所有种子(如果每个种子之前都有空行,如果不是 true 则替换i += 2i++):

transmission-remote -l | awk '{lines[NR]=$2 " " $9} END {for (i = 3; i < NR; i += 2) print lines[i]} '

在第二种情况下,我们将行放入数组中,并在读取输入时使用 for 循环打印它们。

答案2

head -n 3 | tail -n 1 | 
sed -re 's/[[:blank:]]+/\t/g' | 
cut -f 2,9

这会:

  • 选择3条记录(行)
  • 将空格转换为单个制表符,(剪切的预处理)
  • 选择字段 2 和 9

cut单独使用还不够强大,所以我使用 head 和 tail 来选择线(似乎没有什么特别的grep),然后一个简单的sed配方来预处理准备cut

相关内容