Je dois détecter automatiquement tous les lecteurs USB branchés, montés ou non, monter ceux qui ne sont pas déjà montés dans des dossiers portant le nom du nom donné de l'appareil (comme cela arrive dans une machine Windows par défaut) et obtenir les routes des points de montage de tous les périphériques. Les périphériques doivent être montés dans des dossiers dans/media/pi (en utilisant un Raspberry Pi, donc pi est mon nom d'utilisateur). Voilà ce que je fais:Comment extraire les chemins complets de la sortie grep en utilisant l'expression régulière
Pour obtenir le chemin de tous les périphériques Mounter:
1) Exécuter lsblk
, sorties:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 14.4G 0 disk
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
sdb 8:16 1 14.3G 0 disk
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 41.8M 0 part /boot
└─mmcblk0p2 179:2 0 14.8G 0 part/
2) Avec une ligne particulièrement conçu, je peux filtrer certaines informations inutiles:
Je lance lsblk | grep 'sd' | grep 'media'
qui délivre en sortie:
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
Je dois obtenir /media/pi/D0B46928B4691270
et /media/pi/MI PENDRIVE
, de préférence dans un tableau. Actuellement, je fais ceci:
lsblk | grep 'sd' | grep 'media' | cut -d '/' -f 4
Mais il fonctionne uniquement avec des chemins qui ne disposent pas des espaces et la sortie de grep est pas un tableau bien sûr. Quelle serait une manière propre de le faire avec des expressions régulières?
Merci.
Tout d'abord, que fait écho" $ f "? Je vois que dans votre terminal il fait la même chose que lsblk mais je ne sais pas pourquoi ou comment c'est arrivé. Deuxièmement, j'ai lancé lsblk | grep -o '/media/.*$' <<< "$ f" et n'a aucune sortie. Mais je vois que vous obtenez le résultat dont j'ai besoin, chacun des chemins dans une ligne différente et isolé de tout le reste. Comment mettriez-vous cela dans un script? Merci! – user3290570
il a mis votre texte dans une variable et l'a utilisé dans la commande grep. mais je ne sais pas pourquoi utiliser '<<<' et pourquoi juste <
Mohamed
@ user3290570 Dans mon système 'lsblk' produit une sortie complètement différente, ainsi j'ai assigné votre sortie lsblk dans une variable' f' être capable de faire un test avec des résultats similaires à votre système. Dans votre cas, vous devez juste lancer 'lsblk | grep -o '/ media /.*$' 'ou pour mettre les résultats dans un tableau il suffit de lancer' IFS = $ '\ n' lecteurs = ($ (lsblk | grep -o '/ media /.* $ ')) ' –