Perl打印开关在终端

时间:2014-06-08 08:40:05

标签: regex perl find match

如果我想做这样的事情

      perl abc.pl > xyz.html

我应该使用什么命令,以便将xyz.html存储到变量中。我不允许更改上面的任何内容,除了html文件的名称

1 个答案:

答案 0 :(得分:0)

根据你的评论,你可以做到这一点,但它非常难看:

file=$(history | awk '/perl.*>/&& !/history/ {x=$NF} END{print x}')
echo $file

基本上它运行history命令向shell询问最近运行的命令列表。然后,它使用awk查找包含perl>的所有内容。当它找到一个时,它会在变量x中保存行上的最后一个单词(可能是您重定向到的文件名),然后在结尾处打印出任何Perl脚本重定向到的最后一个文件名。丑陋但功能齐全。

HOWTO使用上述方法调试问题......

要调试上面的脚本,首先尝试自己的history命令

history

它应该为您提供已键入的所有命令的列表。现在尝试awk

awk 'BEGIN{print "Hello"; exit}'
Hello

如果不起作用,请尝试此

awk "BEGIN{print 7; exit}"

并继续尝试,直到让awk工作,看看引用如何在Cygwin上运行。

然后你应该做什么

history | awk '/perl/{print}'

查看您运行的所有perl程序,很快您就会知道如何在本答案开始时运行我建议的代码。

或者,你可以这样做,这是很多清洁......

OUTFILE=xyz.html
perl abc.pl > $OUTFILE 
perl def.pl $OUTFILE

原始回答

Perl完全没有意识到它正在写入xyz.html,它只知道它正在写入stdout并且shell在没有Perl知识的情况下指向xyz.html

如果您只是为进程的下一部分保存文件,为什么不直接使用管道将第一个程序的输出发送到第二个程序,如下所示:

 perl abc.pl | perl secondProgram

然后第二个程序可以从其stdin而不是文件中读取。此方法的优点是无需创建临时文件。