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

编辑:还要将引号之间的表达式括起来(单引号比双引号更好)以避免外壳扩展。

于 2013-03-08T18:38:51.633 回答