web-dev-qa-db-ja.com

awkを介した2つの区切り文字間の名前の抽出

私はこのような文字列を持っています

<user>@<server>:<port>:/foo/bar

そして、ユーザー、サーバー、ポート、ディレクトリを抽出したいと思います。

ユーザーは簡単に抽出できます

echo <string> | awk -F"@" '{print $1;}'

ただし、サーバーは2つの異なる境界内にあります。これはawkで可能ですか?

6
Markus

2つの cut コマンドを組み合わせて、サーバー名を抽出できます。

echo <string> | cut -d":" -f1 | cut -d"@" -f2

説明:

  • echo <string> |入力として文字列を使用
  • cut -d":" -f1 |フィールド区切り文字を:に設定し、最初のフィールド(<user>@<server>)を抽出します
  • cut -d"@" -f2フィールド区切り文字を@に設定し、seconフィールド(<server>)を抽出します
8
Wayne_Yux

はい、可能です-区切り文字に正規表現を使用します

$ echo '<user>@<server>:<port>:/foo/bar' | awk -F'@|:' '{print $1; print $2; print $3;print $4;}'
<user>
<server>
<port>
/foo/bar

または

$ echo '<user>@<server>:<port>:/foo/bar' | awk -F'[@:]' '{print $1; print $2; print $3;print $4;}'
<user>
<server>
<port>
/foo/bar
5
steeldriver

grep のみ、

grep -Eoi "[a-z/]{1,}"  <<< "<user>@<server>:<port>:/foo/bar"
user
Server
port
/foo/bar
2
αғsнιη