わかりました、だからこれを手に入れようとしています。
0x0000: 4500 0044 68f7 4000 4011 25c7 8083 d0bf E..Dh.@.@.%.....
0x0010: 8083 da24 85b1 15b3 0030 1e8b 3132 3033 ...$.....0..1203
0x0020: 3132 2e37 3836 3036 2c20 332c 2020 2030 12.78606,.3,...0
0x0030: 2e31 3533 2c20 2d30 2e31 3533 2c20 2039 .153,.-0.153,..9
0x0040: 2e39 3630 .960
0x0000: 4500 0044 68f8 4000 4011 25c6 8083 d0bf E..Dh.@.@.%.....
0x0010: 8083 da24 85b1 15b3 0030 148f 3132 3033 ...$.....0..1203
0x0020: 3132 2e38 3336 3131 2c20 332c 2020 2d30 12.83611,.3,..-0
0x0030: 2e31 3533 2c20 2d30 2e34 3630 2c20 2039 .153,.-0.460,..9
0x0040: 2e39 3630 .960
0x0000: 4500 0044 68f9 4000 4011 25c5 8083 d0bf E..Dh.@.@.%.....
0x0010: 8083 da24 85b1 15b3 0030 1b80 3132 3033 ...$.....0..1203
0x0020: 3132 2e38 3836 3135 2c20 332c 2020 2d30 12.88615,.3,..-0
0x0030: 2e31 3533 2c20 2d30 2e33 3036 2c20 2039 .153,.-0.306,..9
0x0040: 2e38 3037 .807
0x0000: 4500 0044 68fa 4000 4011 25c4 8083 d0bf E..Dh.@.@.%.....
0x0010: 8083 da24 85b1 15b3 0030 2884 3132 3033 ...$.....0(.1203
0x0020: 3132 2e39 3336 3135 2c20 332c 2020 2030 12.93615,.3,...0
0x0030: 2e31 3533 2c20 2d30 2e31 3533 2c20 2039 .153,.-0.153,..9
0x0040: 2e38 3037 .807
到着
E..Dh.@.@.%.....
...$.....0..1203
12.78606,.3,...0
.153,.-0.153,..9
.960
など、
このコマンドを使用してください
sed -u -e 's_0x0000: 4500 0044 68f7 4000 4011 25c7 8083 d0bf __g;s_0x0010: 8083 da24 85b1 15b3 0030 1e8b 3132 3033__g;s_0x0030: 2e31 3533 2c20 2d30 2e34 3630 2c20 2039__g;s_0x0020: 3132 2e37 3836 3036 2c20 332c 2020 2030__g;s_0x0040: 2e39 3630__g' <tcpdump_log_sample_capture2.txt >out2
わかりました。
E..Dh.@.@.%.....
...$.....0..1203
12.78606,.3,...0
0x0030: 2e31 3533 2c20 2d30 2e31 3533 2c20 2039 .153,.-0.153,..9
.960
0x0000: 4500 0044 68f8 4000 4011 25c6 8083 d0bf E..Dh.@.@.%.....
0x0010: 8083 da24 85b1 15b3 0030 148f 3132 3033 ...$.....0..1203
0x0020: 3132 2e38 3336 3131 2c20 332c 2020 2d30 12.83611,.3,..-0
.153,.-0.460,..9
.960
0x0000: 4500 0044 68f9 4000 4011 25c5 8083 d0bf E..Dh.@.@.%.....
0x0010: 8083 da24 85b1 15b3 0030 1b80 3132 3033 ...$.....0..1203
0x0020: 3132 2e38 3836 3135 2c20 332c 2020 2d30 12.88615,.3,..-0
0x0030: 2e31 3533 2c20 2d30 2e33 3036 2c20 2039 .153,.-0.306,..9
0x0040: 2e38 3037 .807
0x0000: 4500 0044 68fa 4000 4011 25c4 8083 d0bf E..Dh.@.@.%.....
0x0010: 8083 da24 85b1 15b3 0030 2884 3132 3033 ...$.....0(.1203
0x0020: 3132 2e39 3336 3135 2c20 332c 2020 2030 12.93615,.3,...0
0x0030: 2e31 3533 2c20 2d30 2e31 3533 2c20 2039 .153,.-0.153,..9
0x0040: 2e38 3037 .807
したがって、最初の5行のうち0x0030で始まる4行目を除くすべての行で機能します。
2番目のセットでは最後の2行には機能しますが、最初の3行には機能せず、3番目と4番目のセットでは機能しません!
誰かが一度見て、何が起こっているのか教えてもらえますか? gオプションを使用すると、再帰的でなければなりません!
(私はsed(GNU sed)4.2.2を受け取りました)
答え1
固定幅フィールドでGNU Sedを使用する
出力は固定幅フィールドにフォーマットされているように見えるため、必要なデータを取得するには、各行から最初の50文字を削除するだけです。たとえば、
sed -r 's/^.{50}//' /tmp/corpus
答え2
列にデータを含むテキストファイルを表示するたびに、次の点を考慮してくださいawk
。これは簡単ですawk
。
$ awk '{print $NF}' file
E..Dh.@.@.%.....
...$.....0..1203
12.78606,.3,...0
.153,.-0.153,..9
.960
E..Dh.@.@.%.....
...$.....0..1203
12.83611,.3,..-0
.153,.-0.460,..9
.960
E..Dh.@.@.%.....
...$.....0..1203
12.88615,.3,..-0
.153,.-0.306,..9
.807
E..Dh.@.@.%.....
...$.....0(.1203
12.93615,.3,...0
.153,.-0.153,..9
.807
特殊変数はNF
現在の行のフィールド数です。したがって、$NF
行の最後のフィールドです。スクリプトawk
はファイルの各行を調べ、最後のフィールドを印刷します。
perl
必要に応じて、次のようにすることもできます。
perl -lane 'print $F[$#F]' file
あるいは、GNU grepを使用することもできます。
grep -oP '.+\s\s*\K[^\s]+' file1
またはsed
何らかの理由で本当にメソッドが必要な場合は、GNU sed(または拡張正規表現を受け入れる他のバージョン)を使用して、次のようにします。
sed -r 's/.* +([^ ]+) *$/\1/' file
上記のコマンドは、.* +
1つ以上の空白()で終わる最も長い文字列を探し、空白ではなく最長の文字列([^ ]+
)を探し、0個以上の空白( *
)を探し、文字列全体をキャプチャされたパターンに置き換えます(これは括弧の目的です) )。 )。それでもファイルにスペースがない場合は失敗します。 awkは最高のツールです。
答え3
使用しないでくださいsed -u
。思ったように動作しません。すべてのバッファリングはスピードアップsed
にのみ貢献するので、あなたに有利に作用します。これは、非常に特定のポイントから入力を受け取り、そのポイントの後に入力を消費したくない場合にのみ本当に便利です。sed
sed -u
q
sed
たとえば、
printf %s\\n line1 line2 | {
sed -u =\;1q
sed =
}
...印刷...
1
line1
1
line2
...しかし、-u
そのフラグを使用しない場合は印刷されます...
1
line1
...最初は、各呼び出しでバッファを埋め、sed
2番目がそれを見る機会がある前にバッファ全体をread()
消費するためです。適切な長さの入力が与えられると、1行に1回実行する必要があるため、処理速度がかなり遅くなります。|pipe
sed
sed -u
sed
read()
しかし、これはあなたの問題ではありません。
あなたの問題は、あなたが一生懸命働いているということです。する:
sed 's/.* //' <infile >outfile
これにより、最後のスペースまで含む行のすべての内容が削除されます。これにより、目的の結果が得られます。
@CodeGnome そうなんですね。これは信頼できるアプローチではありません。表示されるデータには効果がありますが、より安定した別のアプローチは次のとおりです。
sed 's/ */\n/2;s/.*\n//'
これは、2 つ以上の連続した空白が 2 番目に現れることを改行\n
文字に置き換え、その前のすべてを削除します。\n
パターン空間からewline文字を取得する唯一の方法は、sed
そこに置くことです。
答え4
あなたはこれをしなければなりません:
paste -d "" <( awk {'print $10'} yourfile ) <( cut -b 51 yourfile ) <( cut -b 52 yourfile ) <( cut -b 53 yourfile ) <( cut -b 54 yourfile )
出力は次のとおりです
E..Dh.@.@.%.....E..D
...$.....0..1203...$
12.78606,.3,...012.7
.153,.-0.153,..9.153
.960
E..Dh.@.@.%.....E..D
...$.....0..1203...$
12.83611,.3,..-012.8
.153,.-0.460,..9.153
.960
E..Dh.@.@.%.....E..D
...$.....0..1203...$
12.88615,.3,..-012.8
.153,.-0.306,..9.153
.807
E..Dh.@.@.%.....E..D
...$.....0(.1203...$
12.93615,.3,...012.9
.153,.-0.153,..9.153
.807