Portál AbcLinuxu, 10. května 2025 03:06
perl umi /od/../do/ napr. ze souboru: 1 2od 3 4 5do 6do 7do 8 vytiskne: 2od 3 4 5do lze nejak nastavit aby tisknul vcetne (napr ve VIMu to jde pomoci +-: /od/+,/do/-)
my $state = 0; while (<>) { next unless $state ||= m/od/; print; last if m/do; }popr sa mozes pohrat s
grep
(tiez netestovane):
my $state = 0; my @list = grep { $state ||= m/od/; $state &&= ! m/do; $state } <>
my $state = 0; while (<>) { next unless $state ||= m/od/; print; last if m/do/; }Druhy priklad potrebuje krapet upravit aby zahrnul i "do" radek. Pro prehlednost jsem jej rozepsal na vice radek
my $state = 0; print grep { $state ||= m/od/; if ($state) { $state &&= ! m/do/; 1; } else { $state; } } <>;Oboji testovano v perl v5.10.0 pod cygwinem.
$state
resila jsem to takhle, je to delsi, ale pro me srozumitelne. bohuzel to nejde jako one-liner :( $tisk=0; open(INPUT, $in) ; ######### tisk vybranych # while ($radek =INPUT) { #tady ma byt INPUT v spic. zavorkach #OD kdyz je zacatek, je $tisk=1 if ($radek =~/od/) { $tisk=1; } #DO kdyz je konec, vytiskni ho, a $tisk=0 if ($radek =~/do/) { print $radek; $tisk=0; } #vlastni tisk pro $tisk=1 if ($tisk==1) { print $radek; } }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.