Как вставить строку в середину существующего файла - PullRequest
2 голосов
/ 30 ноября 2011

рассмотрим пример, где я хочу вставить несколько строк текста, когда конкретные совпадения (если $ line = ~ m / несколько строк здесь / затем вставить строки в следующую строку):

*current file:*

"This is my file and i wanna insert few lines in here  and other
text of the file will continue."

*After insertion:*

"This is my file and i wanna insert few lines in here  this is my
new text which i wanted to insert and other text of the file will
continue."

Это мой код:

my $sourcename = $ARGV[1];
my $destname = $ARGV[0];
print $sourcename,"\n";
print $destname,"\n";
my $source_excel = new Spreadsheet::ParseExcel;  
my $source_book = $source_excel->Parse($sourcename) or die "Could not open source Excel file $sourcename: $!";

my $source_cell;
#Sheet 1 - source sheet page having testnumber and worksheet number
my $source_sheet = $source_book->{Worksheet}[0];            #It is used to access worksheet

$source_cell = $source_sheet->{Cells}[1][0];                #Reads content of the cell;
my $seleniumHost = $source_cell->Value; 
print $seleniumHost,"\n";

open (F, '+>>',"$destname") or die "Couldn't open `$destname': $!";
my $line;

while ($line = <F>){
print $line;
if($line=~m/FTP/){
#next if /FTP/;
print $line;
print F $seleniumHost;}

Ответы [ 6 ]

5 голосов
/ 30 ноября 2011

Perlfaq покрывает это. Как изменить, удалить или вставить строку в файл или добавить в начало файла?

Файлы представляют собой фиксированные блоки данных. Они ведут себя так же, как лист бумаги. Как вставить строку в середину листа бумаги? Вы не можете, если только вы не покинули пространство. Вы должны заново скопировать все это, вставив свою строку в новую копию.

3 голосов
/ 30 ноября 2011

В perl однострочном:

perl -ane 's/few lines in here  and other\n/this is my\nnew text which i wanted to insert and other /; s/continue./\ncontinue./; print ' FILE

Если вам не нужен однострочный, легко взять замены в любом скрипте;)

0 голосов
/ 24 октября 2018

Пока вы знаете строку:

perl -ne 'if ($. == 8) {s//THIS IS NEW!!!\n/}; print;' 

Очевидно, что вам нужно использовать -i для внесения реальных изменений. ИЛИ:

perl -i -pe 'if($. == 8) {s//THIS IS NEW!!!\n/}' file
0 голосов
/ 07 апреля 2017

Вы можете избежать необходимости повторять текст «разметки», используя подстановку переменных.

echo -e "first line\nthird line" | perl -pe 's/(^first line$)/\1\nsecond line/'
0 голосов
/ 18 августа 2016

Используя флаг редактирования на месте perl (-i), легко добавлять строки в существующий файл, используя Perl, при условии, что вы можете отключить текстовую строку, например (в вашем случае) "хочу вставить несколько строкздесь ":

perl -pi -e 's{wanna insert few lines in here}{wanna insert few lines in here  this is my\nnew text which i wanted to insert }' filename

Он перезаписывает ваше старое предложение (не пугайтесь) копией вашего старого предложения (ничего не потеряно) плюс новый материал, который вы хотите добавить.Вы даже можете создать резервную копию исходного файла, если пожелаете, передав расширение «.backup» в флаг -i:

perl -p -i'.backup' -e 's{wanna insert few lines in here}{wanna insert few lines in here  this is my\nnew text which i wanted to insert }' filename

Подробнее о возможностях поиска и замены Perl можно узнать здесь:

http://www.atrixnet.com/in-line-search-and-replace-in-files-with-real-perl-regular-expressions/

0 голосов
/ 03 декабря 2011

Кто-то упомянул Tie :: File, решение, которое мне придется искать для редактирования файла, но я обычно использую File :: Slurp, который относительно недавно добавил подпрограммы edit_file и edit_file_lines.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...