1

ファイルの内容は次のとおりです。

CPU revision    : 0
Hardware        : nomen TOS 9900 (Flattened Device Tree)
Revision        : nomen TOS 8800 (Flattened Device Tree)
Serial          : 0000

Linux シェル スクリプトを使用して、このファイルを読み取り、(Hardware: 行から) 9900 だけを文字列に変換する必要があります。最善の方法は何ですか? ありがとう!

4

1 に答える 1

1

あなたが提供した情報の範囲を考えると、これはさまざまなツールを使用した非常に簡単な作業です。

$ 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 シェルでもこれを行うことができますが、より多くの作業が必要であり、おそらくワンライナーではありません。

于 2013-10-22T20:57:36.617 に答える