2015-09-25 3 views
1

Perl как удалить вторую строку строки?Perl как удалить вторую строку строки

я могу удалить первую строку, используя этот код:

$cpusttp =~ s/^(.*\n){1}//; 
+0

Я не думаю, что вы должны пытаться извлекают строки из середины многострочной строки. Откуда взялась эта строка? Если вы прочитали его из файла, лучше всего его прочитать в массиве. Удаление второй строки сводится к простому соединению @data, 1, 1'. Если вы объясните больше о том, что вы делаете, мы сможем помочь вам лучше – Borodin

ответ

2

Вам не нужно {1}. Все будет повторяться ровно один раз, если не указано иное.

Кроме того, я не думаю, что регулярное выражение является правильным инструментом для работы. Тем не менее, это должно сделать:

$cpusttp =~ s/^(.*\n)\K(.*\n)//; 

Идея заключается в том, чтобы соответствовать первой строке, а затем игнорировать его (\K), затем сопоставить другую линию.

+0

спасибо, но я не понял, а что еще? –

+0

@GabrielSousa, 'split' /' join' выглядит лучше для меня. Ответ Спририка дает пример. – ndn

3

Там много способов сделать это:

my $multi_line_string = 'line1 
line2 
line3 
line 4 
fifth line'; 

#regex matches once - second line is the first thing after a linefeed 
#\n so it'll remove the second line. 
#This wouldn't scale well to removing the 4th line though. 
my ($new_string) = $multi_line_string =~ s/\n(.*\n)/\n/r; 
print $new_string; 

или, возможно:

my @things = split ("\n", $multi_line_string); 
print join ("\n", @things[0,2..$#things]); 

Или с сращивания:

my $line_to_delete = 1; #arrays start at 0 
my @things = split ("\n", $multi_line_string); 
splice (@things, $line_to_delete, 1); 
print join ("\n", @things); 
+0

спасибо, но где я говорю, это вторая строка на коде frist? –

+0

По умолчанию регулярные выражения соответствуют только одному. Вторая строка - первая строка _after_ linefeed ('\ n'), поэтому она работает. (Добавьте модификатор '/ g' regex, и он удалит каждую другую строку!). Я не думаю, что это делает хорошее общее решение (удалить строку N), поэтому я предлагаю split/join, если вы хотите удалить 85-ю строку или подобное. – Sobrique

+0

спасибо большое, нашел решение для меня $ cpusfinal = join ("\ n", @cpufinal [0,4..8]); –

Смежные вопросы