• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

grep

marce

Guru
Verstehe ich richtig: Du möchtest alle
Code:
foo
bar
finden?

Dann könntest Du den Zeilenumbruch als Steuerzeichen in den Teststring einbauen...
 

framp

Moderator
Teammitglied
Hast Recht :roll: .
Code:
egrep "^bar.*foo$" datei
findet alle Zeilen die mit bar anfangen und mit foo enden. Allerdings tut das dann auch mit grep. egrep brauchst Du nur für das | im regulären Ausdruck.
 
OP
C

catweasel

Hacker
marce schrieb:
Verstehe ich richtig: Du möchtest alle
Code:
foo
bar
finden?

Dann könntest Du den Zeilenumbruch als Steuerzeichen in den Teststring einbauen...

ja

Das mit dem Zeilenumbruch habe ich eben nicht hinbekommen.
 

regexer

Advanced Hacker
Vorschlag: sed
Code:
sed -n '/foo$/{N;/foo\nbar/p}' /pfad/datei

... geht aber auch mit perl usw.


Übrigens: Die ürsprünglich vorgeschlagene grep-Kombination würde auch '^barxxxfoo$' finden...
 

framp

Moderator
Teammitglied
notoxp schrieb:
... Übrigens: Die ürsprünglich vorgeschlagene grep-Kombination würde auch '^barxxxfoo$' finden...
Jupp, denn ich hatte die Frage vom TE so verstanden, dass eine Zeile mit bar beginnt und mit foo endet, egal was zwischen drin steht. Aber nun ist klar was der TE will und Du hast eine gute Lösung angegeben :up:
 
OP
C

catweasel

Hacker
notoxp schrieb:
Übrigens: Die ürsprünglich vorgeschlagene grep-Kombination würde auch '^barxxxfoo$' finden...

Es wurde von mir im übereifrigen Zusammenstutzen zuviel weggelassen; es sollte so ausssehen:

Code:
grep -A 1 '^[ScreenSaver]$' /pfad/datei | grep '^Enabled=false$'
 

regexer

Advanced Hacker
catweasel schrieb:
Code:
grep -A 1 '^[ScreenSaver]$' /pfad/datei | grep '^Enabled=false$'
Achso, du willst eine Config-Datei parsen!
Naja, das würde ich wiederum mit perl machen. Wer sagt denn, dass die Enabled-Zeile immer 1 hinter dem Block-Bezeichner steht?

Code:
perl -ne 'if (/^\s*\[([^]]+)\]/){
  $block=$1;
  next;
}
if(/=/){
  ($key,$value)=split/\s*=\s*/;
  print $value if ($block eq "ScreenSaver" and $key eq "Enabled");
}' /pfad/datei
... ungetestet.
Man kann das script natürlich auch in eine eigene Datei schreiben...

Oder aber ein fertiges perl-Modul benutzen: http://search.cpan.org/~sherzodr/Config-Simple-4.59/Simple.pm
 
OP
C

catweasel

Hacker
notoxp schrieb:
Wer sagt denn, dass die Enabled-Zeile immer 1 hinter dem Block-Bezeichner steht?

Das ist mir inzwischen beim Stöbern in .kde auch eingefallen - gleich nach der Installation sah vieles noch anders aus.
Gut, dann werde Perl nehmen.
 
OP
C

catweasel

Hacker
notoxp schrieb:
Oder aber ein fertiges perl-Modul benutzen: http://search.cpan.org/~sherzodr/Config-Simple-4.59/Simple.pm

Code:
#! /usr/bin/perl -w
use strict;
use Config::Simple;

my $file='/home/vv/.kde/share/config/kickerrc';

my $cfg = new Config::Simple();
$cfg->read($file) or die $cfg->error();
my %Config = $cfg -> vars();
print $_, "\n" foreach keys %Config;
Hier bekomme ich diese Fehlermeldung:

Code:
vv@linux-aais:~> ./config.pl
Something went wrong. No supported configuration file syntax found at /usr/lib/perl5/site_perl/5.10.0/Config/Simple.pm line 184, <FH> line 58.

Wenn ich es so schreibe,

Code:
#! /usr/bin/perl -w
use strict;
use Config::Simple;

my $file='/home/vv/.kde/share/config/kickerrc';

my $cfg = new Config::Simple();
open(FH, $file);
printf("This file uses '%s' syntax\n", $cfg->guess_syntax(\*FH));

bekomme ich:
Code:
This file uses 'ini' syntax
leider weiss ich nicht, wie mir das weiterhilft.
 
Oben