当脚本 运行 时 sed "unterminated `s'command`" 错误
sed "unterminated `s'command`" error when running from a script
我有一个 temp
文件,其内容为:
a
b
c
d
e
当我从命令行 运行 sed 's#b#batman\nRobin#' temp
时,我得到:
a
batman
Robin
c
d
e
但是,当我 运行 来自 Perl 脚本的命令时
#!/usr/bin/perl
use strict;
use warnings;
`sed 's#b#batman\nRobin#' temp`
产生错误:
sed: -e expression #1, char 10: unterminated `s' command
我做错了什么?
为什么要在 Perl 程序中使用 运行 另一个类似 sed
的工具?如果有的话,现在您拥有更多的工具和功能,所以只需使用 Perl 即可。
一种简单的方法来完成您的 sed
事情
use warnings;
use strict;
die "Usage: [=10=] file(s)\n" if not @ARGV;
while (<>) {
s/b/batman\nRobin/;
print;
}
运行 这个程序通过在命令行上提供文件 (temp
) 给它。 die
行仅用于 support/enforce 这种用法;对于脚本的运行来说是无关紧要的。
这个程序就是一个简单的过滤器
<> operator逐行读取命令行提交的所有文件
一行被它分配给$_ variable,这是Perl中很多东西的默认值
默认情况下 s///
运算符 binds to $_
,它会被更改(如果模式匹配)
print
默认打印 $_
变量
-
也可以这样做
while (<>) {
print s/b/batman\nRobin/r
}
使用 /r
modifier s///
returns 更改后的字符串(如果模式不匹配则为原始字符串)
最后也是
print s/b/batman\nRobin/r while <>;
但我希望使用脚本您真的想做更多事情,然后可能不是这样。
另一方面你可以写得更恰当
use warnings;
use strict;
use feature qw(say);
die "Usage: [=13=] file(s)\n" if not @ARGV;
while (my $line = <>) {
chomp $line;
$line =~ s/b/batman\nRobin/;
say $line;
}
在 lexical variable nicely chomp-ed 中添加了一行,可以进行更多工作了。
我有一个 temp
文件,其内容为:
a
b
c
d
e
当我从命令行 运行 sed 's#b#batman\nRobin#' temp
时,我得到:
a
batman
Robin
c
d
e
但是,当我 运行 来自 Perl 脚本的命令时
#!/usr/bin/perl
use strict;
use warnings;
`sed 's#b#batman\nRobin#' temp`
产生错误:
sed: -e expression #1, char 10: unterminated `s' command
我做错了什么?
为什么要在 Perl 程序中使用 运行 另一个类似 sed
的工具?如果有的话,现在您拥有更多的工具和功能,所以只需使用 Perl 即可。
一种简单的方法来完成您的 sed
事情
use warnings;
use strict;
die "Usage: [=10=] file(s)\n" if not @ARGV;
while (<>) {
s/b/batman\nRobin/;
print;
}
运行 这个程序通过在命令行上提供文件 (temp
) 给它。 die
行仅用于 support/enforce 这种用法;对于脚本的运行来说是无关紧要的。
这个程序就是一个简单的过滤器
<> operator逐行读取命令行提交的所有文件
一行被它分配给$_ variable,这是Perl中很多东西的默认值
默认情况下
s///
运算符 binds to$_
,它会被更改(如果模式匹配)print
默认打印$_
变量
也可以这样做
while (<>) {
print s/b/batman\nRobin/r
}
使用 /r
modifier s///
returns 更改后的字符串(如果模式不匹配则为原始字符串)
最后也是
print s/b/batman\nRobin/r while <>;
但我希望使用脚本您真的想做更多事情,然后可能不是这样。
另一方面你可以写得更恰当
use warnings;
use strict;
use feature qw(say);
die "Usage: [=13=] file(s)\n" if not @ARGV;
while (my $line = <>) {
chomp $line;
$line =~ s/b/batman\nRobin/;
say $line;
}
在 lexical variable nicely chomp-ed 中添加了一行,可以进行更多工作了。