Bash

Bash:如何從變數中的行尾提取部分?

  • December 30, 2020

在 bash 腳本的上下文中,我如何uniqueIDuniqueID_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
-) 

引用自:https://unix.stackexchange.com/questions/626432