2017-11-16 22 views
0

私は三つの変数にダウンストリップしたいURL(https://example.com/someone/something)があります。URLをBashの別々の部分に分割するにはどうすればよいですか?

私は私が行うことができますどのように思ったんだけどこれはBashでgrepまたはawkまたは他のツールを使用しています。

明確にするために、3つの変数をすべて一度に取得する方法があるかどうかは問いません。各変数に対して3つの別々のコマンドを実行するのはまったく問題ありません。何かのように、

URL="https://example.com/someone/something" 

DOMAIN=$(echo ${URL} | <some wizardry here>) 

USER=$(echo ${URL} | <some wizardry here>) 

THING=$(echo ${URL} | <some wizardry here>) 
+0

変数USER環境と混同されないようにUUSERを使用していますパーツを変数に保存することは必須です。あるいは、単にパーツを出力したい別の行に? – RomanPerekhrest

+0

私は変数としてそれらをしたいと思います。だから私は各変数ごとに3つの別々のコマンドを実行する必要があると思う。 – jsstrn

+0

複数のコマンドを一度に呼び出す必要はありません。冗長です – RomanPerekhrest

答えて

1
#!/bin/bash 

URL="https://example.com/someone/something" 

DOMAIN=$(echo ${URL} | awk -F'/' '{print $1FS$2FS$3}')  
USER=$(echo ${URL} | awk -F'/' '{print $4}')  
THING=$(echo ${URL} | awk -F'/' '{print $5}') 

echo $DOMAIN $USER $THING 

出力:

https://example.com someone something 
+1

私はこのソリューションを使いました。きれいで読みやすいからです – jsstrn

1

はこれを試してみてください:

$ URL="https://example.com/someone/something" 
$ IFS=' ' read DOMAIN USER THING <<< $(sed 's|/| |3g' <<< ${URL}) 
$ echo ${DOMAIN} 
https://example.com 
$ echo ${USER} 
someone 
$ echo ${THING} 
something 
+0

感嘆符 '!'は、RFC-1738に準拠した有効なURLで使用でき、別の区切り文字を使用する方が安全でしょうか? – etopylight

+0

あなたの提案に感謝します。 – Weike

1

ピュアbashソリューション:

url_str="https://example.com/someone/something" 
if [[ "$url_str" =~ ^(http.+)/([^/]+)/([^/]+)$ ]]; then 
    domain="${BASH_REMATCH[1]}" 
    section1="${BASH_REMATCH[2]}" 
    section2="${BASH_REMATCH[3]}" 
fi 

結果:

$ echo $domain 
https://example.com 
$ echo $section1 
someone 
$ echo $section2 
something 
0

は、あまりにも

URL="https://example.com/someone/something?test=a" 

DOMAIN=$(echo "$URL" | python -c "from urlparse import urlparse;import sys; print urlparse(sys.stdin.read()).hostname") 

USER=$(echo "$URL" | python -c "from urlparse import urlparse;import sys; print urlparse(sys.stdin.read()).path.split('/')[1]") 

THING=$(echo "$URL" | python -c "from urlparse import urlparse;import sys; print urlparse(sys.stdin.read()).path.split('/')[2]") 

QUERYSTRING=$(echo "$URL" | python -c "from urlparse import urlparse;import sys; print urlparse(sys.stdin.read()).query") 
0

だけではbashを、これを試してみてください:)

URL="https://example.com/someone/something" 

regex='(https?://[^/]*)/([^/]*)/(.*)' 

if [[ "$URL" =~ $regex ]] 
then 
    DOMAIN=${BASH_REMATCH[1]} 

    UUSER=${BASH_REMATCH[2]} 

    THING=${BASH_REMATCH[3]} 
fi 

echo "$DOMAIN -- $UUSER -- $THING" 

私は

関連する問題