1

次の形式のファイルがあります。

21:26:54.21 PT  disconnected
21:26:56.18 CC1 received TCMTM
21:26:56.18 CC2 received TCMTM
21:26:56.18 TFT received TCMTM
21:26:56.18 FEC received TCMTM

各行の最初の部分 (21:26:54.21) を削除したいのですが、これを試しました:

sed "s/^[:digit:]*[:space:]//"  file.log

しかし、機能しません。エントリと同じ出力が得られます。

4

4 に答える 4

5

cut:

$ cut -d' ' -f2- file
PT  disconnected
CC1 received TCMTM
CC2 received TCMTM
TFT received TCMTM
FEC received TCMTM

スペースを区切り文字として設定し、フィールド 2 から最後のフィールド ( f2-) までを出力します。

awk:

$ awk '{$1=""}1' file  ## leading space :(
 PT disconnected
 CC1 received TCMTM
 CC2 received TCMTM
 TFT received TCMTM
 FEC received TCMTM

最初のフィールドを空に設定します。

$ awk '{for (i=1;i<=NF; i++) $i=$(i+1); NF=NF-1}1' file
PT disconnected
CC1 received TCMTM
CC2 received TCMTM
TFT received TCMTM
FEC received TCMTM

フィールド番号を 1 ずつ減らし、それぞれを前の番号に移動します (したがって、最初の番号は削除されます)。

sed:

$ sed 's/^[^ ]* //g' file
PT  disconnected
CC1 received TCMTM
CC2 received TCMTM
TFT received TCMTM
FEC received TCMTM

行頭から最初のスペースまでをすべて削除します。

またはあなたに基づいてsed

$ sed "s/^[0-9:.]* //g" file
PT  disconnected
CC1 received TCMTM
CC2 received TCMTM
TFT received TCMTM
FEC received TCMTM

行頭から最初のスペースまでのすべての文字0-9または:またはを削除します。.

于 2013-11-05T10:52:53.377 に答える
2

使用するawk

awk '{$1=x;sub(/^ /,x)}1' file
PT disconnected
CC1 received TCMTM
CC2 received TCMTM
TFT received TCMTM
FEC received TCMTM

別バージョン

awk '{sub(/^[0-9:.]+ /,x)}1' file

そしてもう一つ

awk '{sub(/[^ ]* /,x)}1' file
于 2013-11-05T10:57:28.423 に答える
0

タイムスタンプで一致する必要がある:andがないことに加えて、文字クラスの使用方法にわずかな誤りがあります。.

sed "s/^[[:digit:]:.]*[[:space:]]//" file.log

のような文字クラス[:digit:]は 内でのみ有効な[...]ので、必要になります

s/^[[:digit:]]*

行頭の 0 個以上の数字に一致します。:またはも一致させる必要がある.ため、それらを にも追加し[...]ます。

s/^[[:digit:].:]*

ではなく[:digit:]、 の代わりと考えてください。上記を次のように書くことができます0-9[0-9]

s/^[0-9.:]*

これは数字 0、1、2、3、4、5、6、7、8、9 と一致しますが、現在のロケールで数字と見なされる可能性のあるその他の文字とは一致しません。

于 2013-11-05T14:19:05.943 に答える
0

sed の使用:

sed 's/^[0-9:.]* *//' file.log

出力:

PT  disconnected
CC1 received TCMTM
CC2 received TCMTM
TFT received TCMTM
FEC received TCMTM
于 2013-11-05T11:05:35.883 に答える