我不确定为什么sed
在这个特定情况下没有按预期工作。我有以下形式的行:
12:42:46.675 token
我希望时间戳总是具有这种格式。不幸的是,文件中时不时有一些不以时间戳开头的行,我想摆脱这些行。我尝试过滤掉与上述内容不匹配的所有内容:
sed -n /^\d{2}:\d{2}:\d{2}.\d{3}/p
但即使我提供sed
了-r
选项,上述内容也会过滤掉所有内容。这样做的正确方法是什么sed
?还有其他选择grep
吗?
用于仅显示以grep
时间戳格式开头的行:
grep -E '^([0-9]{2}:){2}[0-9]{2}\.[0-9]{3} ' file
Sed
不接受\d
,[0-9]
改用。两者{
和}
都不是元字符,它们是字面意思的,sed
因此您需要为特殊行为转义它们,结果如下:
sed -n '/^[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}.[0-9]\{3\}/p' infile
编辑:还要将引号之间的表达式括起来(单引号比双引号更好)以避免外壳扩展。