在Scala Shell脚本中使用带引号的引号

时间:2018-01-16 09:20:44

标签: linux bash scala shell command-line

尝试在scala bash文件中使用以下命令(已导入sys.process._):

val writeToLine5 = "sed -i '5a some text' to.file".!

出现以下错误:

> "sed: -e expression #1, char 1: unknown command: `'';

命令本身在命令行中运行良好。

也尝试过:

"""sed -i "5a adding some text to" file.text""".!;
"sed -i \'5a adding some text to\' file.text".!;

这里有scala shell脚本专家吗?谢谢!

PS:问过askubuntu.com。他们建议在这里问。

1 个答案:

答案 0 :(得分:4)

'字符的解释由shell完成,而不是sed本身,因此通常最容易让shell为您完成。

import sys.process._

val writeToLine5 = Seq("sh", "-c", "sed -i '5a some text' to.file").!

但你可以自己做解释。

val writeToLine5 = Seq("sed", "-i", "5a some text", "to.file").!

您也可以使用正则表达式模式来解释内部引用,但它很容易出错,我真的不推荐它。

val cmd = "sed -i '5a some text' to.file"
val res = cmd.split(""" +(?=([^'"]*['"][^'"]*['"])*[^'"]*$)""") //split on non-quoted spaces
             .map(_.replaceAll("['\"]",""))  //remove all the internal quote marks
             .toSeq.!