从 fdisk 命令中提取字符串

从 fdisk 命令中提取字符串

我想编写一个 shell 脚本,它将运行fdisk -l/dev/sdbnfdisk -l.

使用提取的单词,我想将其安装到/mnt.

例如:

Disk identifier: 0x00000000

Device     Boot    Start    End    Blocks    Id    System
/dev/sdb1    *         1    493    3956672    6     FAT16

如何只提取字符串/dev/sdb1

答案1

尝试:

fdisk -l | grep -o '^/dev/sdb[0-9]'

-o选项导致grep仅打印匹配的模式。

更新

如果您想要除 之外的所有内容/dev/sdaX,您可以使用:

fdisk -l | grep -o '^/dev/sd[b-z][0-9]'

答案2

使用这个命令: fdisk -l | awk '/\/dev\/sdb[0-9]/ {print $1}'

答案3

您可以使用sed...

由于目录路径包含/,我选择使用_来分隔 sed 命令(尽管通常使用/,任何符号可以用作分隔符)。

fdisk -l | sed -n 's_^\(/dev/[^ ]*\) .*$_\1_p'

答案4

对于那些没有 root 访问权限的人,您可以使用简单的ls

ls /dev/sd* | grep -o '/dev/sd[a-z][1-9]'

根据需要编辑正则表达式。

更新:正如 @StéphaneChazelas 提到的,设备文件的存在并不能确认底层设备的存在。改为查询会更安全/proc/partitions

awk '$NF ~ /^sd[a-z][0-9]+/ {print "/dev/" $NF}' < /proc/partitions

相关内容