2013-10-31 93 views
1

我有一个命令cat filename | awk'match($ 0,/ regext_patt /,a){print a [1]; exit;}' 我想用scala sys.process来运行这个命令。这里的“文件名”和“regex_patt”将从阶现身定义variables.So据我能够管理这样的:这里在scala中执行awk系统命令时使用scala变量

val extract = (s"cat $file" #| Process(Seq("awk", "match($0,/.+Country=([^;]*);.+/,a) {print a[1] ;exit(0);}"))).!! 

问题是与正则表达式模式,这是硬编码,我不能够解决如何在Seq过程构建器中使用scala变量。

我试过,但它给人的错误:

val reg:String = ".+Country=([^;]*);.+" 
val extract= (s"cat $file" #| Process(Seq("awk", "match($0,/",reg,"/,a) {print a[1] ;exit(0);}"))).! 

,并在这里的错误是:

awk: match($0,/ 
awk:   ^unexpected newline or end of string 
awk: cmd. line:1: match($0,/ 
awk: cmd. line:1:   ^unexpected newline or end of string 

请什么关键的事情我是缺少在这里整理了这一点帮助。在此先感谢

+1

为什么不' “的比赛($ 0 /” + REG + “/,A){打印[1];出口(0);}” '? – red1ynx

+1

OH !!!整蛊和简单..这并没有发生在我身上..感谢它的作品奇妙! –

+0

@ red1ynx请将其作为回答发布,以便我们知道这个问题并不会得到答复。 – wingedsubmariner

回答

1

您可以使用简单的字符串拼接: "match($0,/" + reg + "/,a) {print a[1] ;exit(0);}"