解析shell脚本中的功能

时间:2013-10-18 22:08:29

标签: shell parsing unix

如果我想查找连接到硬盘的主机总线,我会使用

ls -ld /sys/block/sd*/device

它返回

lrwxrwxrwx 1 root root 0 Oct 18 14:52 /sys/block/sda/device -> ../../../1:0:0:0

现在,如果我想在上面的字符串末尾解析出“1”,那么最快的方法是什么?

抱歉,我是shell脚本的新手,我无法充分利用这种强大的脚本语言。

谢谢!

2 个答案:

答案 0 :(得分:2)

用斜杠拆分,选择最后一个字段,用冒号拆分并选择第一个结果:

ls -ld /sys/block/sd*/device | awk -F'/' '{ split( $NF, arr, /:/ ); print arr[1] }'

它产生:

1

答案 1 :(得分:1)

尝试这样做:

$ ls -ld /sys/block/sd*/device |  grep -oP '\d+(?=:\d+:\d:\d+)'
0
2
3

$ printf '%s\n' /sys/block/sd*/device |
    xargs readlink -f |
    grep -oP '\d+(?=:\d+:\d:\d+)'

如果你只想要第一次出现:

grep ...-m1 ...