perl -p -i.bak -e 's/search_str/replace_str/g' filename
Что означают -p, -i.bak s/ и /g?
-p
-i.bak
s/
/g
while (<>) { ... }
filename
filename.bak
s in s/
g
С perlrun :
-p заставляет Perl выполнять следующий цикл вокруг вашей программы, что заставляет его перебирать аргументы имени файла, что-то вроде sed: LINE: while (<>) { ... # your program goes here } continue { print or die "-p destination: $!\n"; }
заставляет Perl выполнять следующий цикл вокруг вашей программы, что заставляет его перебирать аргументы имени файла, что-то вроде sed:
LINE: while (<>) { ... # your program goes here } continue { print or die "-p destination: $!\n"; }
Этот кусок кода:
perl <a href="http://perldoc.perl.org/perlrun.html#%2A-p%2A" rel="nofollow noreferrer">-p</a> <a href="http://perldoc.perl.org/perlrun.html#%2A-i%2A%5b_extension_%5d" rel="nofollow noreferrer">-i.bak</a> <a href="http://perldoc.perl.org/perlrun.html#%2A-e%2A" rel="nofollow noreferrer">-e</a> '<a href="http://perldoc.perl.org/perlop.html/#s%2fPATTERN%2fREPLACEMENT%2fmsixpogce" rel="nofollow noreferrer">s/search_str/replace_str/g</a>' 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);
Он автоматически прочитает строку из оператора diamond, выполнит сценарий и напечатает $ _.
Для получения более подробной информации перейдите по следующей ссылке.
Perl -p
См. perldoc perlrun.
Этот однострочник изменяет каждое вхождение от search_str до replace_str в каждой строке файла, автоматически печатая полученную строку.
search_str
replace_str
Переключатель -i.bak заставляет его изменить файл на месте и сохранить резервную копию в другом файле с расширением .bak.
.bak
1. вызывает perl для принятия следующего цикла вокруг вашего скрипта, который заставляет его перебирать аргументы имени файла, как в sed:
текст ссылки