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

Linux 在Scala Shell脚本中使用带引号的命令,linux,bash,scala,shell,command-line,Linux,Bash,Scala,Shell,Command Line,尝试在scala bash文件(sys.process.\已导入)中使用以下命令: 出现以下错误: > "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脚本编

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

出现以下错误:

> "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上问过。他们建议在这里提问。

字符的解释是由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.!
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.!