我有很多文件需要修改一行。
代码如下:
GetOptions ('full' => \$full,
'dbno=s' => \$dbno,
'since=s' => \$since,
'printSQL' => \$printSQL,
'nwisDB=s' => \$nwisDBOption);
# Find the NWISDB to be extracted
if ($nwisDBOption eq '') {
$nwisdb = &WSCExtractor::getNwisdb;
} else {
$nwisdb = uc($nwisDBOption);
}这是我想要的:
GetOptions ('full' => \$full,
'dbno=s' => \$dbno,
'since=s' => \$since,
'printSQL' => \$printSQL,
'nwisDB=s' => \$nwisDBOption) || &WSCExtractor::usage();
# Find the NWISDB to be extracted
if ($nwisDBOption eq '') {
$nwisdb = &WSCExtractor::getNwisdb;
} else {
$nwisdb = uc($nwisDBOption);
}下面是我使用的perl命令:
perl -pi -e "s/\\\$nwisDBOption\);/\\\$nwisDBOption\) || \&WSCExtractor::usage\(\);/" extractor-template结果如下:
GetOptions ('full' => \$full,
'dbno=s' => \$dbno,
'since=s' => \$since,
'printSQL' => \$printSQL,
'nwisDB=s' => \$nwisDBOption) || &WSCExtractor::usage();
# Find the NWISDB to be extracted
if ($nwisDBOption eq '') {
$nwisdb = &WSCExtractor::getNwisdb;
} else {
$nwisdb = uc($nwisDBOption) || &WSCExtractor::usage();
}它与第二个$nwisDBOption实例匹配,即使它前面没有\。我已经尝试在前面添加更多,以防perl吃掉它们。它当时并不匹配。谢谢。
发布于 2012-12-28 01:25:00
我假设你使用的是Unixish操作系统,而不是Windows。由于您在代码两边使用了双引号,因此shell将对其进行解析,并将双反斜杠替换为单反斜杠。所以perl看到的代码实际上不是
s/\\\$nwisDBOption\);/\\\$nwisDBOption\) || \&WSCExtractor::usage\(\);/但是:
s/\$nwisDBOption\);/\$nwisDBOption\) || \&WSCExtractor::usage\(\);/您可以通过运行以下命令轻松确认这一点:
echo "s/\\\$nwisDBOption\);/\\\$nwisDBOption\) || \&WSCExtractor::usage\(\);/"无论如何,有几种方法可以解决这个问题。我推荐的方法是使用单引号而不是双引号,或者简单地将代码写入实际的Perl脚本文件并以这种方式运行。
然而,如果你真的想这样做,你可以在你的代码中把所有的反斜杠都翻倍。
https://stackoverflow.com/questions/14058269
复制相似问题