
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