如何通过sed摆脱与时间戳不匹配的行?

时间:2013-03-08 18:35:23

标签: sed grep

我不确定为什么sed在此特定实例中未按预期工作。我有以下形式的行:

12:42:46.675 token

我期望alst的时间戳具有该格式。不幸的是,文件中的行不时以时间戳开头,我想摆脱它们。我尝试过滤掉与上述内容不符的所有内容:

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

但即使我提供sed -r选项,上述内容也会过滤掉所有内容。使用sed执行此操作的正确方法是什么?是否有grep的替代方案?

2 个答案:

答案 0 :(得分:1)

使用grep仅显示以时间戳格式开头的行:

grep -E '^([0-9]{2}:){2}[0-9]{2}\.[0-9]{3} ' file

答案 1 :(得分:0)

Sed不接受\d,而是使用[0-9]{}都不是元字符,它们是sed的字面值,因此您需要为特殊行为转义它们,结果如下:

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

编辑:也包围引号之间的表达式(更好的单数而不是双数)以避免shell扩展。