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
また、dirname
URLでも機能します。
> 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つの方法はrev
URLを切り取り、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