Как насчет:
sed '
/myFunc()/!b
:1
s/;/; SNIPPET/;t
n;b1'
Или для строки 13:
sed '
13!b
:1
s/;/; SNIPPET/;t
n;b1'
Я бы не стал использовать sed
- я не думаю, что это хороший инструмент для этой цели из-за присущей ему строчно-ориентированной природы.
Вместо этого я бы предложил:
#!/usr/bin/env perl
use strict;
use warnings;
while (<>) {
#print current line (because we insert _after)
print;
#extract the number. If you need to work on _actual_ line number, you need $.
my ($num) = m/^(\d+)/;
if ( $num > 13 and m/;/ ) {
#print snippet, bail out
print ++$num, " SNIPPET\n";
last;
}
}
#print rest of file
print <>;
Примечание - это извлекает нумерацию из содержимого на основе вашего примера. Я не мог точно сказать, нужны ли вам реальные номера строк - хотя sed -e '13 .. '
подразумевает, что вы это делаете.
В каком случае:
if ( $. > 13 and m/;/ ) {
print "SNIPPET\n";
last;
}