我不确定为什么sed
在此特定实例中未按预期工作。我有以下形式的行:
12:42:46.675 token
我期望alst的时间戳具有该格式。不幸的是,文件中的行不时以时间戳开头,我想摆脱它们。我尝试过滤掉与上述内容不符的所有内容:
sed -n /^\d{2}:\d{2}:\d{2}.\d{3}/p
但即使我提供sed
-r
选项,上述内容也会过滤掉所有内容。使用sed
执行此操作的正确方法是什么?是否有grep
的替代方案?
答案 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扩展。