sed -e '10,15p;4p;s/.*//' file | awk '!/^$/{print $0}' somefile
####
#!/usr/bin/perl -n
my $usage;
BEGIN {
$usage = "usage: $0 linespec file\n"
. "linespec example: 2,5,32-42,4\n"
. "this extracts lines 2,4,5 and 32 to 42 from file\n";
$spec=shift;
die $usage unless $spec;
@l=split/,/,$spec;
for(@l){
($s,$e)=split/-/;
$e||=$s;
$_=[$s,$e];
}
}
CHECK {
unless(@ARGV) {
push @ARGV, ;
chomp @ARGV;
}
die $usage unless @ARGV;
$file = $ARGV[0];
}
# === loop ====
for $l(@l){
print if $.>=$l->[0] and $.<=$l->[1]
}
# === end ===
#
END {
if ($file) {
open $fh,'<', $0;
@lines = <$fh>;
close $fh;
open $fh,'>',$0;
for(@lines){
print $fh $_;
last if /^__DATA__$/;
}
print $fh $file,"\n";
}
}
__DATA__
####
: r ! l 11-13,42,125-234 somefile
####
: r ! l 1234-1500