不确定如何对此进行说明,但我的输出会返回整齐排列的信息,这些信息在由标签或空格分隔的列中整齐排列
$ 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命令,但我想不出要搜索什么
答案 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我个人会使用awk
或cut
方法,除非你把它放在一个脚本中和/或处理一个大的
数据集。
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
如果我们确实进行了上述替换,我们将打印出结果。