我想编写一个 shell 脚本,它将运行fdisk -l
并/dev/sdbn
从fdisk -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