0

IPCONFIGコマンドのテキストファイルがあり、REGEXを使用してホスト名(つまりS4333AAB45)の値を取得したいと考えています。

Windows IP Configuration

   Host Name . . . . . . . . . . . . : S4333AAB45
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No

次のオプションを試しましたが、機能しませんでした

/\bHost Name\s+(\d+)/
4

3 に答える 3

1

これが私が使用するものです:

/\s+Host Name.*: (\w+)$/
于 2012-09-02T14:00:46.237 に答える
1

AWK でフィールド分割を使用する

使用している正規表現エンジンや、ホスト名部分と一致させるために正規表現を使用する必要がある理由については言及していません。AWK にアクセスできる場合は、代わりにこれをフィールド分割の問題として扱うことができます。例えば:

awk '/\<Host Name\>/ { print $NF }' /tmp/foo

既知のライン位置を使用

Cygwin または同様のものがインストールされていると仮定すると、関心のあるレコードの位置を使用して、正規表現をまったく使用せずに必要なデータを取得できます。例えば:

cat /tmp/foo | head -n3 | cut -d: -f2 | tr -d ' '

代わりに、 catコマンドをipconfigへの呼び出しに置き換えるだけで、必要な結果が得られるはずです。

代わりに sed を使用

sed を使用して、関心のある行を見つけ、その行の末尾の単語だけを出力することもできます。例えば:

sed -n '/\<Host Name\>/ s/.*[[:space:]]\([[:alnum:]]\+\)$/\1/p' /tmp/foo
于 2012-09-02T15:00:00.887 に答える
0

あなたのホストは、ホスト名の最初の文字として文字 "S" を持っていたので、"(\d+)" はホスト名と一致しません。また、ホスト名行のドットとコロンも説明できませんでした。したがって、weexpectedTHIS からの回答でうまくいくはずです。ただし、参考までに、最初に中間ファイルを作成せずにホスト名を取得する方法を次に示します。

$ipconfig = `ipconfig /all`;

($host) = $ipconfig =~ /^\s*Host Name.*:\s*(\w+)/m;

「^」が $ipconfig の複数行の内容の任意の行の先頭と一致するように、そこに「/m」が必要です。私は「\s+」の代わりに「\s*」を使用する傾向があり、出力形式の将来の変更に対する一種の保険として使用します (新しいバージョンのコマンドでは空白が削除または拡張されることがよくあります)。

于 2013-12-26T21:40:05.377 に答える