Mailinglist Archive: opensuse-programming-de (97 mails)

< Previous Next >
Re: grep shell script mit variablem Suchmuster
  • From: David Haller <lists@xxxxxxxxxx>
  • Date: Fri, 24 Jun 2005 16:09:23 +0200
  • Message-id: <20050624140923.GA2867@xxxxxxxxxxxxxxxxxx>
Hallo,

Am Fri, 24 Jun 2005, Christof Janssen schrieb:
>ich möchte in einem text nacheinander verschiednen Jahreszahlen 1900,
>1901 etc suchen und die zahl der Einträge bestimmen.
>Für ein bestimmtes Muster (zB 1900) macht
>
> grep -c 1900 Text
>
>genau was ich möchte. Wie kann ich eine shellvariable, zB i = 1900,
>1901, ... 2000 in das Suchmuster für grep konvertieren, damit ich
>die Suche automatisieren kann ? oder gibt es bessere Mittel und Wege
>(möglichst auf shell basis) ?

perl -we '
while( defined( $_ = <> ) ) {
s/(19\d{2}|2000)/$m{$1}++/eg;
}
END{ foreach(sort keys %m) { print "$_: $m{$_}\n"; } }' DATEI

Das hat den Vorteil, dass die Datei nur einmal gelesen wird und somit
die langsame Startzeit gegenueber for i in ...; do grep -c "$i" DATEI
wohl mehr als wett macht. Ausserdem liest das auch von STDIN wenn
keine DATEI angegeben wird.

Das Muster legst du bequem ueber die Regexp zwischen den ersten beiden
// von s///eg fest. Siehe 'perldoc perlre'.

-dnh

--
Human beings were created by water to transport it uphill.
-- BSD fortune file

< Previous Next >
References