uniqueID
Bash 스크립트의 맥락에서 uniqueID_db.dat
다음과 같은 URL 부분에서 고유 ID를 추출하려면 어떻게 해야 합니까?
https://cdn.somedomain.com/fetch/uniqueID/uniqueID_db.dat
https://server123456.eu.somedomain.com/789/storage/uniqueID/uniqueID_db.dat
https://cdn.somedomain.com/fetch/6234449e1539130b/6234449e1539130b_db.dat
https://server654321.eu.somedomain.com/0123/storage/afd85b3f9ae5bc9/afd85b3f9ae5bc9_db.dat
행은 항상 끝납니다 _db.dat
. 추출하려는 것은 그 앞에 있는 고유 ID입니다.
모든 행은 변수에 있습니다 $link
.
sed
추출을 위해 다른 도구를 사용할 수 있습니까? 그렇다면 어떻게 해야 할까요? 제가 배울 수 있도록 어떻게 작동하는지 설명해 주실 수 있나요?
나는 다음과 같은 것을 상상한다:
echo "${link}" | sed '...'
감사해요.
답변1
-) link='https://server123456.eu.somedomain.com/789/storage/uniqueID/uniqueID_db.dat'
-) #.. Remove averything up to last /
-) uid="${link##*/}"
-) echo "${uid}"
uniqueID_db.dat
-) #.. Remove the suffix.
-) uid="${uid%_db.dat}"
-) echo "${uid}"
uniqueID
-)
GNU Bash 참조 매뉴얼의 섹션 3.5.3에 이에 대한 내용이 많이 있습니다.
https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
쌍을 원한다면 uniqueID/uniqueID
조심하세요. 이러한 Bash 구성은 번거로워 보일 수 있지만 몇 바이트를 편집하기 위해 외부 프로세스를 시작하는 것보다 낫습니다.
-) link='https://server123456.eu.somedomain.com/789/storage/uniqueID/uniqueID_db.dat'
-) #.. Extract the prefix.
-) pfx="${link%/*/*}"
-) #.. Substring the link from after the prefix.
-) uid="${link:${#pfx}}"
-) echo "${uid}"
/uniqueID/uniqueID_db.dat
-) #.. Clip front and back.
-) uid="${uid#/}"
-) uid="${uid%_db.dat}"
-) echo "${uid}"
uniqueID/uniqueID
-)
답변2
당신은 그것을 사용할 수 있습니다 awk
:
awk -F '[/_]' '{print $(NF-1)}' file
또는 grep
및 cut
:
grep -o '[^/]*$' file | cut -d_ -f1
또는 grep -P
:
grep -Po '[^/]*(?=_db.dat$)' file
또는 sed
:
sed -E 's/(.*\/)([^/]*)_db.dat$/\2/' file