私はこれを数時間いじくり回していて、それを機能させることができないようです。www、ftp.somedomain.net.nz、またはsomedomain.comだけを持っていて、ホスト名をsedにエコーすることで、パターンからsomedomainだけを抽出して変数として設定したい場合は、どうすればよいですか?
例えば:
var="echo $HOSTNAME | sed 's/someregex to fit all$//'"
私はこれを数時間いじくり回していて、それを機能させることができないようです。www、ftp.somedomain.net.nz、またはsomedomain.comだけを持っていて、ホスト名をsedにエコーすることで、パターンからsomedomainだけを抽出して変数として設定したい場合は、どうすればよいですか?
例えば:
var="echo $HOSTNAME | sed 's/someregex to fit all$//'"
本当にsedを使う必要がありますか?
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"
これや他のいくつかの解決策は、次のようなものではうまくいかないことに注意してください。ただし、そのようwww.news.google.com
なことをテストすると、次のことが可能になります。
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"
何が機能するかは、入力がどれだけうまく形成されているかによって異なります。
プレフィックスがわかっている場合は、試すことができます( "ftp。"、 "www。"、または何もありません)。
var=$(sed -E 's/^((ftp|www)\.)?([^.]*)\..*/\3/' <<< "$HOSTNAME")
を使用するsed ... <<< $VARIABLE
ことをお勧めしますecho $VARIABLE | sed ...
二重引用符はコマンドを実行しません。バッククォートを使用するか、より適切には、以下を使用します$(...)
。
var=`sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME"`
var=$( sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME" )
ドメインを取得するには、おそらく正規表現を微調整する必要があります。アドレスのどの部分が必要ですか?例はかなり不明確です。wwwまたはftpを削除したいだけの場合は、パラメータ展開を使用できます。
var=${HOSTNAME#www.}
var=${var#ftp.}
var=${var%%.*}