因为大文件而使用Sed,我想匹配表单的字符串
'09 / 07/15 16:56:36,333000000','DD / MM / RR HH24:MI:SSXFF'
并将其替换为
'09 / 07/15 16:56:36','DD / MM / RR HH24:MI:SS'
由regex tester检查此正则表达式似乎与
匹配
'\d{2}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2},\d{9}','DD\/MM\/RR HH24:MI:SSXFF'
但是当我做的时候
sed -ie "s#\(\x27\d{2}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}\),\d{9}
\(\x27,\x27DD\/MM\/RR HH24:MI:SS\)XFF\x27#\1\2\x27#g" inputfile
它不会取代任何东西。 我错过了什么?
答案 0 :(得分:2)
为什么不使用这样的东西?
#!/usr/bin/sed -f
s/,[[:digit:]]*//
s/XFF//
答案 1 :(得分:0)
注意:在下面的答案中,我描述了为什么你的表达式一般不起作用。我强烈建议您尽可能先尝试简化表达,或使用@ StevenPenny的优秀答案,因为:
问题是sed
和http://regexr.com/正则表达式引擎有些不同。请参阅网站上的“RegEx引擎”部分:
虽然正则表达式的核心功能集相当一致,但不同的实现(例如Perl vs Java)可能具有不同的功能或行为。
RegExr使用浏览器的RegExp引擎进行匹配,其语法突出显示和文档反映了JavaScript RegExp标准。
而最新版本的GNU sed
大多与POSIX.2基本正则表达式(BRE)兼容。有关GNU sed(1)
的版本4.2.2,请参阅sed
联机帮助页的摘录:
正常表达
应该支持POSIX.2 BRE,但它们并不完全是因为性能问题。正则表达式中的\ n序列与换行符匹配,对于\ a,\ t和其他序列也是如此。
POSIX正则表达式语言的描述(即BRE - 基本正则表达式和ERE - 扩展正则表达式)位于regex(7)
联机帮助页。
特别是关于你的表达:
\d
,在BRE中您应该写[[:digit:]]
;对于空格,您使用的是\s
,而在BRE中则是[[:space:]]
。{
,其中BRE应为\{
。