Tel*_*Why 2 command-line output text-processing
例子:
abcd@abcd-abcde:~$ xinput --list --short
Virtual core pointer
? SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)]
? Logitech USB RECEIVER id=12 [slave pointer (2)]
Run Code Online (Sandbox Code Playgroud)
我将如何从输出中提取一列,比如第二列?并且,例如,将其存储在变量中?
是否有可能做到这一点?
ter*_*don 10
这正是awk
为此而生的。使用xinput
我系统上的输出:
$ xinput --list --short
? Virtual core pointer id=2 [master pointer (3)]
? ? Virtual core XTEST pointer id=4 [slave pointer (2)]
? ? SIGMACHIP USB Keyboard id=12 [slave pointer (2)]
? ? Logitech M325 id=14 [slave pointer (2)]
? ? AlpsPS/2 ALPS DualPoint Stick id=17 [slave pointer (2)]
? ? AlpsPS/2 ALPS DualPoint TouchPad id=16 [slave pointer (2)]
? Virtual core keyboard id=3 [master keyboard (2)]
? Virtual core XTEST keyboard id=5 [slave keyboard (3)]
? Power Button id=6 [slave keyboard (3)]
? Video Bus id=7 [slave keyboard (3)]
? Power Button id=8 [slave keyboard (3)]
? SIGMACHIP USB Keyboard id=11 [slave keyboard (3)]
? Dell WMI hotkeys id=18 [slave keyboard (3)]
? AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
? Sleep Button id=9 [slave keyboard (3)]
? UVC Camera (046d:0819) id=10 [slave keyboard (3)]
$ xinput --list --short | awk -F"\t" '{print $2}'
id=2
id=4
id=12
id=14
id=17
id=16
id=3
id=5
id=6
id=7
id=8
id=11
id=18
id=13
id=9
id=10
Run Code Online (Sandbox Code Playgroud)
awk
将自动将每个输入行拆分为由 给定的值的字段-F
。默认情况下,它在空白处拆分,但这里我们需要一个选项卡。第一个字段是$1
,第二个$2
等等。
或者,您可以使用cut
:
$ xinput --list --short | cut -f2
id=2
id=4
id=12
id=14
id=17
id=16
id=3
id=5
id=6
id=7
id=8
id=11
id=18
id=13
id=9
id=10
Run Code Online (Sandbox Code Playgroud)
您可以像保存任何其他命令一样将输出保存在 shell 变量中:
$ ids=$(xinput --list --short | awk -F"\t" '{print $2}')
$ echo $ids
id=2 id=4 id=12 id=14 id=17 id=16 id=3 id=5 id=6 id=7 id=8 id=11 id=18 id=13 id=9 id=10
$ echo "$ids"
id=2
id=4
id=12
id=14
id=17
id=16
id=3
id=5
id=6
id=7
id=8
id=11
id=18
id=13
id=9
id=10
Run Code Online (Sandbox Code Playgroud)
您也可以将其保存为数组:
$ ids=( $(xinput --list --short | awk -F"\t" '{print $2}') )
$ echo ${ids[@]}
id=2 id=4 id=12 id=14 id=17 id=16 id=3 id=5 id=6 id=7 id=8 id=11 id=18 id=13 id=9 id=10
$ echo ${ids[2]}
id=12
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6016 次 |
最近记录: |