我有以下命令“xm list”的输出:
Name ID Mem VCPUs State Time(s)
Domain-0 0 505 4 r----- 11967.2
test1 28 1024 1 -b---- 137.9
test2 33 1024 1 -b---- 3.2
我用:./ myscript test2执行一个shellcript 在这个脚本中,我需要test2的ID(显示在命令“xm list”(ID33)) 我用grep尝试了它并且像这样切割:
xm list | grep $1 | cut ???
这是如何运作的?
答案 0 :(得分:4)
使用awk怎么样?
xm list | awk '/^test2/ {print $2}'
我在^
中添加了/^test/
,以便在该行的开头检查此文本。 awk '$1=="test2" {print $2}'
也会成功。
$ cat a
Name ID Mem VCPUs State Time(s)
Domain-0 0 505 4 r----- 11967.2
test1 28 1024 1 -b---- 137.9
test2 33 1024 1 -b---- 3.2
$ awk '/^test2/ {print $2}' a
33
答案 1 :(得分:4)
使用cut
,您无法将多个连续分隔符视为一个,因此cut -d ' '
将无效。
在其他答案中使用awk
,或在使用tr
之前使用cut
“挤压”空格:
xm list | grep test2 | tr -s ' ' | cut -d ' ' -f2
答案 2 :(得分:2)
xm <subcommand> [args]
domid 域名
使用xend将域名转换为域ID 内部映射。
您是否尝试过xm domid test2
?
答案 3 :(得分:0)
可以使用grep:
完成xm list | grep -P -o '(?<=^([^ ]+ ){3}).*$'
手机上的Grep不知道-P标志,所以我现在无法测试,但这应该可行。
好的,以前的代码不起作用,是的。我也试图获得第4列而不是第2列
但是,我仍坚持认为可以使用grep
完成!
xm list | grep -P -o '^test2\s+\K[^ ]+'
此代码已经过测试,可以正常使用:)
这里的要点是\K
将重置先前匹配的文本。