Sed erfolgreich?!

Hallo,

ob ein grep die angegebene Zeichenfolge gefunden hat, kann ich mit
if ["$?" -eq 1]; then

erhalten.
Wie mache ich das aber bei einem sed der Art

#** 93 ist die Position in der Datei, an der die Zeichenfolge beginnt
sed -ne’/^.{93}$suchtext.*/p’ $quell > $ziel

Gruß,
Nina

#** Kontonummer wurde nicht in der Quelldatei gefunden
if ["$?" -eq 1]; then

… Nachtrag


ich möchte nicht nur wissen, ob sed etwas gefunden hat, sondern auch wie oft etwas gefunden wurde.

Gruß,
Nina

Hallo Nina,

ob ein grep die angegebene Zeichenfolge gefunden hat, kann ich
mit
if ["$?" -eq 1]; then

erhalten.
Wie mache ich das aber bei einem sed der Art

#** 93 ist die Position in der Datei, an der die Zeichenfolge
beginnt
sed -ne’/^.{93}$suchtext.*/p’ $quell > $ziel

Schalte einfach ein

wc -l

danach.

 success=$( | wc -l)
 if [$success -ge 1];
 then
 echo "Yo!"
 fi

Gruß,
Andreas

Hallo Andreas,

Schalte einfach ein

wc -l

danach.

success=$( | wc -l)
if [$success -ge 1];
then
echo „Yo!“
fi

… da erhalte ich die Fehlermeldung

wc: illegal option – 1
usage: wc [-c|-m] [-lw] [name …]

mit
man wc
erhalte ich folgende Erklärung (die mich aber auch nicht weiterbringt)

wc - count words, lines, and bytes or characters in a file

SYNOPSIS
wc [-c|-m] [-lw] [file]…

DESCRIPTION
The wc command counts lines, words, and bytes or characters in the
named files, or in the standard input if no file names are specified.
It also keeps a total count for all named files.

A word is a string of characters delimited by spaces, tabs, or
newlines.

Options
wc recognizes the following options:

-c Report the number of bytes in each input file.

-m Report the number of characters in each input file.

-w Report the number of words in each input file.

The c and m options are mutually exclusive. Otherwise, the l, w, and
c or m options can be used in any combination to specify that a subset
of lines, words, and bytes or characters are to be reported.

When any option is specified, wc reports only the information
requested. If no option is specified, the default output is -lwc.

When a file is specified on the command line, its name is printed
along with the counts.

(HP-UX Release 11.00: October 1997 )

Gruß,
Nina

Hi Nina,

wc: illegal option – 1

wc hat Recht (die Option ist l - ell - und nicht eins). -l zählt die L ines in der Eingabe…

Gruß
bernhrd

Hi Bernhard,

wc hat Recht (die Option ist l - ell - und nicht eins). -l
zählt die L ines in der Eingabe…

das funktioniert - allerdings erhalte ich immer den Wert 0 zurück… (aber die Zeilen werden durch das sed korrekt ausgegeben!)

Gruß,
Nina

Hi Nina,

das funktioniert - allerdings erhalte ich immer den Wert 0
zurück… (aber die Zeilen werden durch das sed korrekt
ausgegeben!)

was wertest du denn aus, den Rückgabewert von wc (Shell-Variable $?, die angibt, ob das Programm ‚wc‘ ohne Fehler gelaufen ist) oder die Zahl der Zeilen, die wc auf STDOUT ausspuckt? Mit der Zeilenzahl sollte es funktionieren…

U.u. mußt du noch ein paar Leerzeichen aus der Ausgabe von wc wegfiltern (das läßt sich wc nicht abgewöhnen, ebenso wie den Dateinamen, wenn wc nicht die Zeilen aus STDIN zählen soll), also etwa so:

linecount=$(sedscript Inputfile | wc -l | sed 's/ \*//g')
if [$linecount -gt 0]
then
 ....
fi

Viel Erfolg
bernhard

das hat nicht funktioniert
Hi Bernhard,

ich hab das geschrieben

success=$(sed -ne ‚/^.{92}‘$konto’.*/p’ $quell > $ziel |wc –l)

und es funktioniert nicht (soll heißen, ich kriege immer 0 zurück).
Egal, ob 1 Zeile, x Zeilen oder 0 Zeilen gefunden wurden :frowning:
Ich brauche aber die konkrete Zeilenzahl, die durch sed gefunden wurden

Gruß,
Nina

P.S.: Hab übrigens noch kaum UNIX-Erfahrungen…

Hallo Nina,

ich hab das geschrieben
success=$(sed -ne ‚/^.{92}‘$konto’.*/p’ $quell > $ziel
|wc �l)

und es funktioniert nicht (soll heißen, ich kriege immer 0
zurück).
Egal, ob 1 Zeile, x Zeilen oder 0 Zeilen gefunden wurden :frowning:

Das Pipe-Symbol „|“ macht den Output eines Programmes zum Input eines anderen Programmes .
Wenn Du den Output vorher umleistest (mit > $ziel) dann kommt hier aber beispielsweise beim wc eben nichts mehr an.
Zähle also erst die Anzahl der Zeilen und leite diese bei Erfolg in einem zweiten Befehl in die Zieldatei um.
Also:

success=$(sed -ne '/^.\{92\}'$konto'.\*/p' $quell |wc -l)
if [$success -ge 1];
then
 sed -ne '/^.\{92\}'$konto'.\*/p' $quell \> $ziel
fi

Ich empfehle Dir den Advanced Bash-Scripting Guide zu lesen:
http://www.tldp.org/LDP/abs/html/part1.html

Gruß,
Andreas

Danke!

Ich empfehle Dir den Advanced Bash-Scripting Guide zu lesen:
http://www.tldp.org/LDP/abs/html/part1.html

… wär empfehlenswert, ich weiß…
nur herrscht bei mir derzeit akuter zeitmangel; normalerweise arbeite ich nicht unter unix, muss da nur derzeit ein paar verarbeitungen umstellen.

unix-kenntnisse sind eigentlich sehr wichtig und deshalb werd ich mir, bei etwas nachlassendem stress, den abs mal reinziehen (schon runtergeladen :wink:)