web-dev-qa-db-ja.com

sedの逆一致、見つかったものの反対を置換

私のsyslogからこの出力があるとしましょう、

precalculated src_hash => 20 bytes @ 0x7f811c001e20
A6 2D E5 CD 2A BA F0 42 56 66 19 D4 61 1A E3 A0  .-..*..BVf..a...
C7 5E 5F 77                                      .^_w
precalculated dst_hash => 20 bytes @ 0x7f811c0020d0
15 EC 34 59 89 0F 4F F8 C5 68 3A DC BB 09 27 91  ..4Y..O..h:...'.
5D C1 E7 28                                      ]..(

私の目標は、右側のASCIIジャンクを取り除き、ハッシュの16進バイトのみを残しながら、変数名で始まる行を保存することです。正規表現は使用している

(^([a-zA-Z_]+\s+)+[=]{1}) | (^([a-zA-Z0-9]{2}[\s]{1})+)

これは、変数名またはその値を含む16進文字列で始まる行に正しく一致します。ストリーム内の「他の」ものを取り除くために、sedから一致するものを反転できる方法はありますか?どういうわけか、ファイルにパイプできますか?

5
Q Q
sed -e '/^precalculated/!s/^\(.\{47\}\).*$/\1/' < h

これにより、先頭のprecalculatedと一致しない行の最初の47文字が保持されます。一致する行がコピーされます。

1
peterph

私はこのパターンを見つけました:

sed  -e 's/^\(..\s.\{45\}\).*/\1/'
0
dchirikov

スペースで区切られた16進数字のペアの最初のシーケンスを置換グループに一致させ、そのグループを再置換することができます。

sed -r 's/^(([[:xdigit:]]{2}\s+)+).*$/\1/'
0
steeldriver