我有一个像
这样的字符串 July 20th 2017, 11:03:37.620 fc384c3d-9a75-459d-ba92-99069db0e7bf
我需要从行的开头删除所有内容,直到UUID子字符串(它是一个标签,\ t就在UUID之前)。
我的正则表达式看起来像这样:
^\s*July(.*)\t
当我在regex101中对它进行测试时,它都可以正常运行:https://regex101.com/r/eZ1gT7/1077
然而,当我把它变成sed命令时,它不做任何替换:
less pensionQuery.txt | sed -e 's/^\s*July(.*)\t//'
其中pensionQuery.txt是一个文件,其中包含与上述类似的行。因此上面的命令只是吐出未修改的文件contnent。
我的 sed 命令错了吗?
有什么想法吗?
答案 0 :(得分:4)
正则表达式是对的,您 尝试使用sed
--regexp-extended
'-E'
'--regexp-extended'
使用扩展正则表达式而不是基本常规表达式 表达式。扩展的正则表达式是
以来egrep
接受的那些;他们 可以更清楚,因为它们通常有较少的反斜杠。 从历史上看,这是一个GNU
扩展程序,但-E
扩展名为POSIX
自从被添加到echo -e $'July 20th 2017, 11:03:37.620\tfc384c3d-9a75-459d-ba92-99069db0e7bf' | sed -E 's/^\s*July(.*)\t//' fc384c3d-9a75-459d-ba92-99069db0e7bf
标准
sed
还可以在Basic (BRE) and extended (ERE) regular expression
上进行简单的阅读基本和扩展正则表达式是指定模式语法的两种变体。基本正则表达式(BRE)是
grep
中的默认值(类似于-r
)。使用-E
或grep -E
选项(类似地,.val()
)激活扩展正则表达式语法(ERE)。