2

私はこれを数時間いじくり回していて、それを機能させることができないようです。www、ftp.somedomain.net.nz、またはsomedomain.comだけを持っていて、ホスト名をsedにエコーすることで、パターンからsomedomainだけを抽出して変数として設定したい場合は、どうすればよいですか?

例えば:

var="echo $HOSTNAME | sed 's/someregex to fit all$//'"
4

3 に答える 3

6

本当にsedを使う必要がありますか?

HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"

これや他のいくつかの解決策は、次のようなものではうまくいかないことに注意してください。ただし、そのようwww.news.google.comなことをテストすると、次のことが可能になります。

HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"

何が機能するかは、入力がどれだけうまく形成されているかによって異なります。

于 2013-03-05T00:38:58.690 に答える
1

プレフィックスがわかっている場合は、試すことができます( "ftp。"、 "www。"、または何もありません)。

var=$(sed -E 's/^((ftp|www)\.)?([^.]*)\..*/\3/' <<< "$HOSTNAME")

を使用するsed ... <<< $VARIABLEことをお勧めしますecho $VARIABLE | sed ...

于 2013-03-05T00:26:14.787 に答える
0

二重引用符はコマンドを実行しません。バッククォートを使用するか、より適切には、以下を使用します$(...)

var=`sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME"`
var=$( sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME" )

ドメインを取得するには、おそらく正規表現を微調整する必要があります。アドレスのどの部分が必要ですか?例はかなり不明確です。wwwまたはftpを削除したいだけの場合は、パラメータ展開を使用できます。

var=${HOSTNAME#www.}
var=${var#ftp.}
var=${var%%.*}
于 2013-03-05T00:21:40.167 に答える