Bash
Bash:如何從變數中的行尾提取部分?
在 bash 腳本的上下文中,我如何
uniqueID
從uniqueID_db.dat
這些 URL 的部分中提取,其中 uniqueID 可以是任何東西,例如: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 '...'
謝謝。
-) 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 -)