パターンにスペースが含まれている場合にテーブルのパターンを解析する方法

パターンにスペースが含まれている場合にテーブルのパターンを解析する方法

この質問の続き:コマンド出力の最初の列を解析し、対応する2番目の列の値を取得します。 以下のようにテーブル形式で文字列を出力するコマンドがあるとします。私が探している「パターン」にスペースが含まれている場合はどうなりますか?たとえば、テーブルが次のような場合:

First Characteristic:     b
Second Characteristic:    89.4
Version:                  58.93
Name of Device:           myDevice
Name of Device Load:      myDevice-load-123abc

上記の表の「デバイスロード名」の横にある値を取得するにはどうすればよいですか?

明確にすると、私が探している値が「デバイスロード名」の横にあることがわかります。出力の5行目にあるかもしれませんが、その値がどのように見えるかもしれません(たとえば、「-load-」などのパターンマッチを試すことはできません)。

答え1

これはどうですか?

grep "Name of Device Load:" your_file.txt| cut -d ":" -f 2 | tr -d " "

これにより、関心のある行のみを保持し、それらを2つのフィールドに分割し(各行が:一度だけ発生する場合にのみ機能します)、スペースを削除します。

答え2

私はこれを使用しますperl

このような:

#!/usr/bin/env perl

use strict;
use warnings;

local $/;
my %lookup = ( <> =~ m/^(.*): (\S+)$/gm );
print $lookup{'Name of Device Load'},"\n";

私達はまたはファイル名からデータを「読みます」STDIN。 (myscript.pl filenameそれはすべてです<>。少し魔法です。)

上記の正規表現キャプチャグループを使用してこれを「解析」し、一度に2つの要素をキャプチャし(フラグによって複数行にわたってキャプチャを繰り返す)、キーと値のペアのハッシュgmテーブルを作成します。

その後、名前付きキーに関連する値を抽出してName of Device Load印刷するので、順序は重要ではありません。

答え3

私はそれを達成するためにawk -F":"を使用します。したがって、2番目の列が必要な場合はこれを行うことができます。

awk -F":" 'FNR == 5 {print $2}'

これは一時的な解決策ですが、この場合は機能します。

知っていて、必要なパターンが「デバイスロード名」の場合は、次のことができます。

cat file.txt | grep "Name of Device Load" | awk -F":" '{print $2}'

編集:5行目と2行目と検索パターンのオプションが追加されました。基本的にすべてはこのアイデアに基づいています。

https://stackoverflow.com/questions/1506521/select-row-and-element-in-awk

答え4

次のスクリプトを使用すると、2番目の値を取得できます

awk -F: /デバイスロード名:/ { $2 印刷} file1

関連情報