Tente:
fdisk -l | grep -o '^/dev/sdb[0-9]'
A opção -o
faz com que grep
imprima apenas um padrão correspondente.
Atualizado
Se você quiser todos, exceto /dev/sdaX
, pode usar:
fdisk -l | grep -o '^/dev/sd[b-z][0-9]'
Eu quero escrever um script de shell, que executará fdisk -l
e extrairá uma string /dev/sdbn
da saída de fdisk -l
.
Usando a palavra extraída, quero montá-la em /mnt
.
Por exemplo:
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 493 3956672 6 FAT16
Como faço para extrair apenas a string /dev/sdb1
?
Use este comando:
fdisk -l | awk '/\/dev\/sdb[0-9]/ {print $1}'
Você pode usar sed
...
Como um caminho de diretório contém /
, escolhi usar _
para delimitar o comando sed (embora um símbolo usualmente use /
, any possa ser usado como delimitador).
fdisk -l | sed -n 's_^\(/dev/[^ ]*\) .*$__p'
Tente isso
para obter /dev/sdb1
fdisk -l | grep -w "/dev/sdb1" | awk '{print $1}'
Para quem não tem acesso root, você pode usar um simples ls
:
ls /dev/sd* | grep -o '/dev/sd[a-z][1-9]'
Edite a expressão regular como quiser.
ATUALIZAÇÃO: Como mencionado por @ StéphaneChazelas, a presença de arquivos de dispositivos não confirmará a existência do dispositivo subjacente. Seria mais seguro consultar /proc/partitions
:
awk '$NF ~ /^sd[a-z][0-9]+/ {print "/dev/" $NF}' < /proc/partitions
Tags fdisk shell-script