获取排序输出列中的第一个条目

时间:2018-04-04 01:03:22

标签: bash scripting

不确定如何对此进行说明,但我的输出会返回整齐排列的信息,这些信息在由标签或空格分隔的列中整齐排列

$ pactl list short sink-inputs

10  1   6   protocol-native.c   float32le 2ch 44100Hz
12  1   34  protocol-native.c   s16le 2ch 44100Hz

我想从第一列(10)返回结果

myvar=$(pactl list short sink-inputs | grep float32le |  ?  )

我知道有一个bash命令,但我想不出要搜索什么

3 个答案:

答案 0 :(得分:3)

awk也可以替换grep,并且可以同时使用空格和标签

myvar=$(pactl list short sink-inputs | awk '/float32le/{print $1}')

答案 1 :(得分:2)

bash工具cut几乎是专为此

而设计的
myvar=$(pactl list short sink-inputs | grep float32le | cut -f1)

答案 2 :(得分:0)

您也可以使用sed(和awk一样,删除grep)。 sed是关于 awk大小的一半,如果重要的话应该更快地执行(稍微?) 给你。

作为一个较长的线,虽然打字需要更长的时间,所以你可能会失去任何时间 你获得(然后是一些):P我个人会使用awkcut 方法,除非你把它放在一个脚本中和/或处理一个大的 数据集。

myvar="$(pactl list short sink-inputs|sed -n '/float32le/s/^\([^ \t]*\).*float32le.*$/\1/p')"

细分,这是:

sed -n '                                            '

-n告诉sed除非明确要求

,否则不输出任何内容
        /float32le/

搜索 float32le

                   s/

找到后,我们会替换......

                     ^                        $

从行的开始到结束......

                      \(       \)

但请记住(" item"(匹配子表达式) 1 )...

                        [^ \t]*

直到第一个空格或标签的所有内容。

                                   float32le  

为了替换该行,它必须包含 float32le ......

                                 .*         .*

任何包围。

                                               /\1

用"项目"替换我们替换的整行。我们之前记得 1

                                                  /p

如果我们确实进行了上述替换,我们将打印出结果。