perl -p -i.bak -e 's/search_str/replace_str/g' filename
-p
,-i.bak
s/
和/g
的含义是什么?
答案 0 :(得分:13)
-p
:假设“while (<>) { ... }
”
循环程序并打印每个
加工生产线。-i.bak
:更改输入文件
(filename
)inplace并创建
文件filename.bak
作为备份。s in s/
:标记替换g
- 进行替换
全球......不要停止
第一次更换。答案 1 :(得分:8)
来自perlrun:
-p
导致Perl在程序周围采用以下循环,这使得它迭代文件名参数,有点像sed:
LINE: while (<>) { ... # your program goes here } continue { print or die "-p destination: $!\n"; }
答案 2 :(得分:3)
这段代码:
perl
-p
-i.bak
-e
's/search_str/replace_str/g'
filename
基本上与:
相同#! /usr/bin/env perl
$extension = '.orig';
LINE:
while (<>) {
# -i.bak
if ($ARGV ne $oldargv) {
if ($extension !~ /\*/) {
$backup = $ARGV . $extension;
} else {
($backup = $extension) =~ s/\*/$ARGV/g;
}
rename($ARGV, $backup);
open(ARGVOUT, ">$ARGV");
select(ARGVOUT);
$oldargv = $ARGV;
}
s/search_str/replace_str/g;
} continue {
print; # this prints to original filename
}
select(STDOUT);
答案 3 :(得分:2)
此单行更改文件每行中search_str
到replace_str
的每次出现,自动打印生成的行。
-i.bak
开关会使其就地更改文件,并将备份存储到另一个.bak
扩展名的文件中。
答案 4 :(得分:2)
答案 5 :(得分:1)
1.causes perl假设你的脚本周围有以下循环,这使得它迭代文件名参数有点像sed: