给出一个文件:
2014-08-01 20:13:17.666 xxxxxxxxxx
2014-08-01 20:13:17.666 xxxxxxxxxx
2014-08-01 20:13:17.666 xxxxxxxxxx
......
Run Code Online (Sandbox Code Playgroud)
我试图使用sed删除微秒:
GNU sed version 4.2.1
Copyright (C) 2009 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)
以下是失败,错误消息"sed:-e expression#1,char 38:无效范围结束"
sed 's/\([0-9][0-9\- :]*\)\.[0-9]\{3\}/\1/g' < a.csv
Run Code Online (Sandbox Code Playgroud)
但是,vi a.csv和搜索
\([0-9][0-9\- :]*\)\.[0-9]\{3\}
Run Code Online (Sandbox Code Playgroud)
工作良好.
rootcause是转义的连字符.如果我删除了转义的连字符,sed将不会抱怨但它与预期的模式不匹配.我尝试过不同的方法来逃避连字符无济于事.
解决方法是明确写出整个日期时间格式,如下所示:
sed 's/\([0-9][0-9]*-[0-9][0-9]-[0-9][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]\)\.[0-9]\{3\}/\1/g'
Run Code Online (Sandbox Code Playgroud)
解决方法看起来很丑陋而且很麻烦.我确实认识到底层RE引擎在sed和vi之间是不同的.但是,我喜欢
与sed错误"无效范围结束"相关但未解决
我是一个学习 scala 并研究匿名函数和值的初学者。我无法转换{case e if e % 2 == 0 => e}为 Val。我尝试了不同的语法(如下所示的示例)但无济于事。转换为 val 没有真正的目的;只是想获得更深入的了解。
package exercises.functions
object CollectVal extends App {
println(List(1,2,3,4,5).collect{case e if e % 2 == 0 => e})
// val onlyEvens: Int = e:Int => Int = e if (e % 2 == 0 ) => e
// val onlyEvens = e:Int = {case e if e % 2 == 0 => e}
println(List(1,2,3,4,5).collect{onlyEvens})
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏谢谢!