Bashでhttpリンクの最後の部分を取得する方法は?

Bashでhttpリンクの最後の部分を取得する方法は?

httpリンクがあります:

http://www.test.com/abc/def/efg/file.jar 

file.jarの最後の部分を変数に保存したいので、出力文字列は "file.jar"です。

健康状態:リンクの長さはさまざまです。例:

http://www.test.com/abc/def/file.jar.

私はこれを試しました:

awk -F'/' '{print $7}'

しかし、問題はURLの長さなので、すべてのURLの長さに対して機能するコマンドが必要です。

答え1

うまくいきますawkが、穀物砲で鹿を狩るのと少し似ています。 URLがすでにNakedの場合は、bashそれをシェル変数に入れて、組み込みのパラメータ置換を使用して目的の操作を実行するのは非常に簡単です。

$ myurl='http://www.example.com/long/path/to/example/file.ext'
$ echo ${myurl##*/}
file.ext

どのように機能するかは、「* /」に一致するプレフィックスを削除することです##。この演算子が実行する操作は次のとおりです。

${haystack##needle} # removes any matching 'needle' from the
                    # beginning of the variable 'haystack'

答え2

basenameまた、dirnameURLでも機能します。

> url="http://www.test.com/abc/def/efg/file.jar"
> basename "$url"; basename -s .jar "$url"; dirname "$url"
file.jar
file
http://www.test.com/abc/def/efg

答え3

を使用するとawk、を使用して$NFフィールド数に関係なく最後のフィールドを取得できます。

awk -F / '{print $NF}'

文字列をシェル変数に保存する場合は、次を使用できます。

a=http://www.test.com/abc/def/efg/file.jar
printf '%s\n' "${a##*/}"

答え4

1つの方法はrevURLを切り取り、revフィールドを切り捨てることです。たとえば、

echo 'http://www.test.com/abc/def/efg/file.jar ' | rev | cut -d '/' -f 1 | rev

出力:

file.jar 

例2:

echo 'http://www.test.com/abc/cscsc/sccsc/def/efg/file.jar ' | rev | cut -d '/' -f 1 | rev

出力:

file.jar

関連情報