私は間違いなくsed/awk初心者とみなすことができます。私は、成功せずにマルチステップフィルタを行うように取り組んできました。各セグメントは、それ自身の上で実行されたときに結果をもたらしますが、それらを一緒にチェーン化すると何も得られません。私はsedを試しました| awk、awk | sed、sed | sed、awk | awk。彼らはすべてが失敗するので、私はそれが誰でもよく知られているものだと仮定しています。piping sed | awkまたはawk | sed
データは複数行のテキストブロックで、各ブロックはレコード(したがって ">"デリミタ)として扱うことができます。私たちはADV_NONCONNブロックだけにフィルタをかけた後、 "bdaddr"または "RSSI"を含む行だけにテキストブロックをフィルタリングしたいと思います。私が知る限り、私はそうするために別の操作にパイプする必要があります。
sudo hcidump | awk 'BEGIN {RS=">"} /ADV_NONCONN/' | sed -n -e "/bdaddr/p" -e "/RSSI/p" > log.txt
hcidump出力サンプル(一つの "レコード"):逆実行
HCI Event: LE Meta Event (0x3e) plen 43
LE Advertising Report
ADV_NONCONN_IND - Non connectable undirected advertising (3)
bdaddr 0C:F3:EE:0D:70:89 (Public)
Flags: 0x06
Unknown type 0xff with 26 bytes data
RSSI: -62
(最初のsedの部分を、次にawkは)同じ空集合の結果を与えます。どんな単純なことを私が逃したのですか?
それは、ほとんどsed' 'へawk''パイプに必要なことはありませんawk構文は通常理解しやすくなります。 – Barmar
私はあなたにいくつかのフィードバックを与えることができます:あなたの質問とあなた自身の答えの両方が気晴らしのポイントになっています - それらをより簡潔にし、焦点を合わせることを検討してください。 – mklement0
また、新参者へのいくつかの標準的なアドバイス:答えがあなたの問題を解決した場合は、その横の大きいチェックマーク(✓)をクリックして受諾し、オプションで上向きに投票します(上向き投票は少なくとも15評判ポイントが必要です)。 他の回答が有益だった場合は、投票してください。受諾およびアップ投票は将来の読者に役立ちます。関連するヘルプセンターの記事(http://stackoverflow.com/help/someone-answers)を参照してください。質問にまだ完全に回答していない場合は、フィードバックを提供してください。最高の解決策を自分で見つけたと思ったら、それを回答として投稿し、自己受け入れます。 – mklement0