0

Web リンクから URL を切り取ろうとしています

たとえば、http://site.com/path/to/site.html を取得して、'site.com' または 'http://site.com' を出力したいと します。

これは私が理解できる最も近いものですが、正しく機能していません:

echo "https://site.com/shisad/sadh" | sed -n "s/.*\(http.*\/\).*/\1/p"

印刷: https ://site.com/shisad/

それは私が特殊文字「/」で間違っていることだと思います.何かアイデアはありますか?

4

3 に答える 3

2
  1. パス名またはスラッシュを含む他のパターンを照合するために使用sedしている場合は、スラッシュ以外の文字を使用して正規表現を区切ります。それは人生をずっと楽にしてくれます。

  2. .*パターンは貪欲です。可能な限り長い文字列と一致します。より制約された式が必要です。

印刷するhttp://site.comには、次を使用します。

sed -n 's%.*\(https\{0,1\}://[^/]*\).*%\1%p'

印刷するsite.comには、次を使用します。

sed -n 's%.*https\{0,1\}://\([^/]*\)/.*%\1%p'

ホスト名の後にスラッシュがないサイトがあると思われる場合(つまり、入力にのみが含まれているhttp://site.com場合)、次を使用できます。

sed -n -e 's%.*https\{0,1\}://\([^/]*\)/.*%\1%p' \
       -e 's%.*https\{0,1\}://\([^/]*\)$%\1%p'

これらは、あらゆる種類の句読文字を「有効」として受け入れることに注意してください。[-a-zA-Z0-9_.]*おそらく、代わりに使用したい場合は、より区別することができますが、[^/]*国際化ドメイン名には注意してください。2つのパターンのバージョンは、URLの後の空白で停止しません。の閉じ括弧が含まれます(http://example.com)。これは、文字が有効であるという点の当然の結果です。

于 2012-08-23T05:26:33.987 に答える
1
echo "https://site.com/shisad/sadh"|awk -F/ '{print $1"//"$2$3}'
于 2012-08-23T05:31:52.290 に答える
0

を使用していると思いますGNU sed

echo "https://site.com/shisad/sadh" | sed -r 's%.*(https://[^/]*).*%\1%'
https://site.com

ドメイン名だけを取得するには、格納括弧の場所を変更するだけです。

echo "https://site.com/shisad/sadh" | sed -r 's%.*https://([^/]*).*%\1%'
site.com

もちろん、簡単なperlでやりたいことができますgrep

echo "https://site.com/shisad/sadh" | grep -oP 'https://[^/]*'
https://site.com
于 2012-08-23T05:26:46.863 に答える