我必须从我的scala代码
运行此命令perl -ne '/pattern/ && print $1 and last' filename
我试过了
val re = """pattern"""
val file = "filename"
val v= (Process(Seq("""perl -ne '/"""+re+"""/ && print $1 and last' """+file))).!!
但有些人虽然生成了命令行所需的相同命令,但仍无法正常工作。它说:
java.io.IOException:无法运行程序“perl -ne'/ pattern /&& print $ 1和last'file”:error = 2,没有这样的文件或目录。
有谁可以建议哪里出错?
答案 0 :(得分:2)
也许你需要这样的东西?
val pattern: String = "..." // your pattern
val perlCode = s""" '/$pattern/ && print $$1 and last' """
val v = (Process(Seq("perl", "-ne", perlCode, file))).!!
问题是Process
需要执行Seq
个参数。在你的情况下,
perl -ne '/pattern/ && print $1 and last' filename
perl
是第一个,-ne
是第二个,后跟perl代码/pattern/ && print $1 and last
(请注意,单引号'
不相关,它们只是用于确保将代码字符串作为单个参数传递给perl
),最后你有文件名。
scala.sys.process docs显示了你几乎所有的东西。如果您的文件是java.io.File
,请尝试:
val perlCmd = Seq("perl", "-ne", perlCode)
val file = new java.io.File("/tmp/f.txt")
val result = perlCmd #< file !!
与
相同perl -ne '/pattern/ && print $1 and last' < /tmp.txt