Bash:変数の行の末尾から部分を抽出する方法は?

Bash:変数の行の末尾から部分を抽出する方法は?

uniqueIDBashスクリプトの文脈で、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
-) 

おすすめ記事