0

sedこの特定のインスタンスでなぜ期待どおりに機能しないのかわかりません。次の形式の行があります:

12:42:46.675 token

タイムスタンプは常にその形式であると私は期待しています。残念ながら、ファイルにはタイムスタンプで始まらない行があり、それらを削除したいと思います。上記と一致しないものをすべて除外してみました:

sed -n /^\d{2}:\d{2}:\d{2}.\d{3}/p

sedしかし、私がオプションを与えたとしても、上記はすべてを除外し-rます。それを行う正しい方法は何sedですか?そして、代替手段はありgrepますか?

4

2 に答える 2

1

grepタイムスタンプ形式で始まる行のみを表示するために使用します。

grep -E '^([0-9]{2}:){2}[0-9]{2}\.[0-9]{3} ' file
于 2013-03-08T18:42:39.697 に答える
0

Sedは受け入れません。代わり\dに使用してください。と[0-9]は両方ともメタ文字ではありません。これらはリテラルであるため、特別な動作のためにエスケープする必要があります。次のようになります。{}sed

sed -n '/^[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}.[0-9]\{3\}/p' infile

EDIT:シェルの展開を避けるために、式を引用符で囲みます(二重よりも単一の方が良い)。

于 2013-03-08T18:38:51.633 に答える