플러그가 꽂혀 있거나 마운트되어 있지 않거나 마운트되지 않은 USB 드라이브를 자동으로 감지해야합니다. 예를 들어 장치의 이름이 지정된 폴더에 이미 마운트되지 않은 드라이브를 마운트해야합니다 기본적으로 Windows 컴퓨터에서 발생 함) 모든 장치의 탑재 지점 경로를 가져옵니다. 장치는/media/pi 폴더에 마운트해야합니다 (예 : pi는 내 사용자 이름 임).정규 표현식을 사용하여 grep 출력에서 전체 경로를 추출하는 방법
1) lsblk
실행, 출력 :
모든 마운터 장치의 경로를 얻으려면이 내가 뭘하는지입니다
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) 특히 제작 된 라인을, 나는 필터링 할 수 있습니다 불필요한 정보 아웃 :
내가 lsblk | grep 'sd' | grep 'media'
를 실행 출력한다 :
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
,
/media/pi/D0B46928B4691270
및 /media/pi/MI PENDRIVE
을 가져와야하며, 배열로 구성해야합니다. 현재 나는이 일을하고있다 :
그러나 공백이없는 경로에서만 작동하며 grep의 출력은 물론 배열이 아니다. 정규 표현식으로 이것을 수행하는 명확한 방법은 무엇입니까?
감사합니다.
우선 echo "$ f"는 무엇을합니까? 나는 당신의 터미널에서 lsblk와 똑같은 것을 보았습니다. 그러나 나는 그것이 왜 일어 났는지 알지 못합니다. 둘째, 나는 lsblk | grep -o '/media/.*$'<<< "$ f"그리고 출력이 전혀 없습니다. 그러나 나는 당신이 필요한 결과를 얻는 것을 봅니다. 각각의 경로는 다른 라인에 있고 다른 모든 것들과 격리되어 있습니다. 어떻게 그걸 대본에 넣으시겠습니까? 감사합니다. – user3290570
그는 텍스트를 변수에 넣고 grep 명령에 사용했습니다. 하지만 왜'<<<'를 사용하고 왜'<'가 왜 작동하지 않는지 모르겠다. – Mohamed
@ user3290570 내 시스템에서'lsblk'는 완전하게 다른 출력을 만들어 내며, 그래서 당신의 lsblk 출력을 변수'f' 시스템과 유사한 결과로 테스트를 수행 할 수 있습니다. 귀하의 경우에는'lsblk | grep -o '/ media /.*$''또는 결과를 배열에 넣으려면'IFS = $ '\ n'drives = ($ (lsblk | grep -o '/ media /.* $ '))' –