ログのファイルはすべて、タイムスタンプで始まり、その後にログレベルとメッセージが続き、タイムスタンプを取り除くスクリプトが必要です。すべての行で最初の空白の前にすべてを削除する
21:22:34.571 DEBUG - some message
DEBUG - some message
に私はずっとそう何かアドバイスをいただければ幸いbashのを使用していない:ある
は、私は、ファイルのすべての行が有効になり用のスクリプトをしたいです。
ログのファイルはすべて、タイムスタンプで始まり、その後にログレベルとメッセージが続き、タイムスタンプを取り除くスクリプトが必要です。すべての行で最初の空白の前にすべてを削除する
21:22:34.571 DEBUG - some message
DEBUG - some message
に私はずっとそう何かアドバイスをいただければ幸いbashのを使用していない:ある
は、私は、ファイルのすべての行が有効になり用のスクリプトをしたいです。
awkを使用することができた場合:エルス
awk '$1="";1' data_file_name
を、シェル(非常に非常に遅い)を使用します。
#!/bin/bash
while read -r line; do
printf '%s\n' "${line#* }"
done <"data_file_name"
'awk'スクリプトは出力行に先行する空白を残すことに注意してください。その点でシェルコードはきれいです。 –
@JonathanLeffler悪いことに、 'awk'コードは' $ 1'に代入することによって、それらの間に 'OFS'を挟んですべてのパラメータから再構築されます。これは、フィールド間のホワイトスペースの分離を閉鎖します。 – Kaz
@ Kazそして、[この答えは236の票で、まったく同じです](http://stackoverflow.com/a/2961994/6843677)です。あなたが実際に(スペース(これはおそらくオプション4)を使用してください)](http:// stackoverflow。com/a/32774373/6843677)、これは単純な必要性のためにあまりにも多くのようです。 – sorontar
あなたは、入力データに応じて、sed
またはcut
のいずれかを試すことができます。
sed -e 's/^[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}.[0-9]\{3\}//' <data_file_name>
cut -c 13- <data_file_name>
コメント(もっと深刻なものではなく、面白いこと):シェルスクリプトで '
また、 'sed 's/^ [^] * //''を使う方が簡単かもしれません - 最初の空白までの非空白をすべて削除してください。あなたのスクリプトは実際には空白も削除しません。 –
@JonathanLefflerあなたはどちらの場合もそうです。質問はアイデアに関するものでした。私は2つのアイデアを出した。その他の情報はありません – GMichael
grep
も同様に、スペース
$ cat ip.txt
21:22:34.571 DEBUG - some message
21:23:34.571 DEBUG - some other message
後INGのこれは
$ grep -o ' .*' ip.txt
DEBUG - some message
DEBUG - some other message
これますない
$ grep -oP ' \K.*' ip.txt
DEBUG - some message
DEBUG - some other message
日数を行うと、 '-f2- file.log' '' – anubhava
を-dカット先頭の空白のままにしますログファイルには表示されません。また、真夜中以降に投稿された最初のメッセージの前、または毎時、または...?日付行にタイムスタンプが前に付いていない(そして、おそらくそうではないはずです)場合は、それらをそのままにしておく必要があるからです。 'cut 'や' sed' s/^ [^] * // ''のようなものを使う仕組みはあまり適切ではありません。あなたがマッチングしているものをもっと厳しくする必要があります。私は、日付を残すことはおそらく良いアイデアではないことを観察しますが、それは私の問題ではなく、あなたの問題です。 –
私は2つのログのセットを比較しようとしていますが、それらの間に何が違うのかを把握しようとしています。タイムスタンプのためにすべてのラインが違うと言います。 – annedroiid