用perl脚本编写

时间:2012-08-03 13:24:01

标签: perl sed

我在perl脚本中使用了以下类型的脚本,并期望在第1行输入。我收到一些错误,如下所示;有什么帮助吗?

plz忽略perl变量....

错误消息 - sed:-e表达式#1,字符22:命令后的额外字符

# Empty file will not work for Sed line number 1
    `"Security Concerns Report" > $outputFile`;

    `sed '1i\
    \
    DATE :- $CDate \
    Utility accounts with super access:- $LNumOfSupUserUtil \
    Users not found in LDAP with super access: - $LNumOfSupUserNonLdap\

    ' $outputFile > $$`;
    `mv $$ $outputFile`;
}

1 个答案:

答案 0 :(得分:5)

你当前的问题是反斜杠字符由backtick operator内的Perl解释,美元字符也是如此。所以你的反斜杠换行序列变成了执行的shell命令的换行符。如果你用\\替换这些反斜杠,你将会遇到这个障碍,但你仍然会有一个非常脆弱的程序。

Perl正在调用一个调用sed的shell。这需要您未执行的shell的额外引用级别。如果你的文件名和数据不包含特殊字符,你可以使用它,直到有人使用包含'的日期格式(在许多会破坏你的代码的事情中)。

而不是解决这个问题,在Perl中完成所有操作要简单得多。所有sed和shell都可以做到,Perl几乎可以轻松或轻松地完成。从你的问题中你不清楚你要做什么。我将专注于sed调用,但这可能不是编写程序的最佳方式。

如果你真的需要在现有文件中添加一些文本,CPAN上有一个广泛使用的模块已经做得很好。优先使用现有库来重新发明轮子。 File::Slurp只有prepend_file方法。在下面的代码中,我使用here-document运算符作为多行字符串。

use File::Slurp; # at the top of the script with the other use directives
File::Slurp->prepend_file($outputFile, <<EOF);
DATE :- $CDate
Utility accounts with super access:- $LNumOfSupUserUtil
Users not found in LDAP with super access: - $LNumOfSupUserNonLdap
EOF