あなたが提供した情報の範囲を考えると、これはさまざまなツールを使用した非常に簡単な作業です。
$ awk '$1=="Hardware"{print $5}' sample.txt
awk は式の一致を探し、その行を空白で区切られたフィールドに分割します。 $1
は最初の単語、$5
は 5 番目の「単語」です。
$ sed -ne '/^Hardware/s/[^0-9]//gp' sample.txt
sed コマンドは、特定の正規表現に一致する行でコマンドを実行することもできます。この場合、「ハードウェア」行では、数字以外のすべての文字を null に置き換えます。これにより、明らかに数字が残ります。これは、フィールドではなくタイプで分離します。(あなたは何を達成しようとしているのかを述べていませんでした。)
そして最後に:
$ readarray -t stuff < sample.txt
$ for line in "${stuff[@]}"; do this=($line); test "${this[0]}" = "Hardware" && echo "${this[4]}"; done
外部ツールを使用せずに、bash のみを使用して行を検索します。この種の配列参照は、古い Bourne スタイルのシェルでは機能しないことに注意してください。しかし、Linux または OSX を使用している場合、シェルはデフォルトで bash になっている可能性があります。
そして、あなたが疑問に思っているなら"${this[4]}"
、「4」はbash配列がゼロから番号付けされているのに対し、awk行は単語分割されているため$1
です.
非 bash シェルでもこれを行うことができますが、より多くの作業が必要であり、おそらくワンライナーではありません。