Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Suche] Hilfe beim sed Befehl
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1110
Location: Schwabenländle

PostPosted: Sat Nov 17, 2007 2:52 pm    Post subject: [Suche] Hilfe beim sed Befehl Reply with quote

Hallo Zusammen,

Wie kann kann man mit sed in enen Shellscript feststellen, ob z.B. in der Datei: /var/beispiele/test.txt die Zeile : Dieses ist ein Beispieltext vorhanden ist oder nicht?

Ich habe mich auch auch schon hier umgesehen, aber irgendwie komme ich da nicht weiter...

Ich bin über jeden Tipp dankbar. :D
Back to top
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4565

PostPosted: Sat Nov 17, 2007 3:04 pm    Post subject: Reply with quote

Reicht dir denn da nicht grep?
Code:
$ grep EE /var/log/Xorg.0.log
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(II) Loading extension MIT-SCREEN-SAVER
$ echo $?
0
$ grep EEEE /var/log/Xorg.0.log
$ echo $?
1
Back to top
View user's profile Send private message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1110
Location: Schwabenländle

PostPosted: Sat Nov 17, 2007 3:29 pm    Post subject: Reply with quote

hmmm....,

pinzipiell ist es völlig egal, mit welchem Befehl ich das abfrage....

Ich dachte da mehr an so etwas:

Code:
if [ xxx ] ;then
    echo "Eintrag vohanden"
    else
    echo "Eintrag nicht vohanden"
fi


Wobei ich eben bei xxx hänge..
Back to top
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3366
Location: de

PostPosted: Sat Nov 17, 2007 3:56 pm    Post subject: Reply with quote

An die Stelle von xxx schreibst du halt das grep rein. Problematisch wird das, wenn Dein Beispielsatz Sonderzeichen enthält.

Falls Dir grep nicht sympathisch ist, kannst du Zeichen(ketten) auch mit sed suchen lassen.
Back to top
View user's profile Send private message
return13
Guru
Guru


Joined: 02 Feb 2004
Posts: 513
Location: Hamburg - Germany

PostPosted: Sat Nov 17, 2007 4:01 pm    Post subject: Reply with quote

wenn ich mich nicht irre... :
Code:
if [ $(sed -n '/Dieses\ ist\ ein\ Beispieltext/p'  /var/beispiele/test.txt  | wc -l) -gt 0]; then
      #mach was
else
      #mach was anderes
fi



oder halt

Code:
if [ $(grep 'Dieses ist ein Beispieltext'  /var/beispiele/test.txt  | wc -l) -gt 0]; then
      #mach was
else
      #mach was anderes
fi

_________________
Wer Recht erkennen will, muß zuvor in richtiger Weise gezweifelt haben.
Aristoteles (384-322), griech. Philosoph, Begründer d. abendländ. Philosophie
Back to top
View user's profile Send private message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1110
Location: Schwabenländle

PostPosted: Sat Nov 17, 2007 6:16 pm    Post subject: Reply with quote

ich bekomme bei beiden Varianten von return13 folgende Fehlermeldung:

Code:
/usr/local/src/test.sh: line 3: [: missing `]'


Was kann das sein?
Back to top
View user's profile Send private message
return13
Guru
Guru


Joined: 02 Feb 2004
Posts: 513
Location: Hamburg - Germany

PostPosted: Sat Nov 17, 2007 6:29 pm    Post subject: Reply with quote

schreib mal gerade was du getippt hast, damit ich dir sagen kann was falsch ist...
_________________
Wer Recht erkennen will, muß zuvor in richtiger Weise gezweifelt haben.
Aristoteles (384-322), griech. Philosoph, Begründer d. abendländ. Philosophie
Back to top
View user's profile Send private message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1110
Location: Schwabenländle

PostPosted: Sat Nov 17, 2007 6:46 pm    Post subject: Reply with quote

return13 wrote:
schreib mal gerade was du getippt hast, damit ich dir sagen kann was falsch ist...


Code:
#!/bin/sh

if [ $(grep "test der erste"  /var/beispiele/test.txt | wc -l) -gt 0]; then
   echo "testaugabe 1"
else
   echo "testaugabe 2"
fi

exit


bzw:

Code:
#!/bin/sh

if [ $(sed -n '/test\ der\ erste /p'  /var/beispiele/test.txt  | wc -l) -gt 0]; then    
   echo "testaugabe 1"
else
   echo "testaugabe 2"
fi

exit
Back to top
View user's profile Send private message
return13
Guru
Guru


Joined: 02 Feb 2004
Posts: 513
Location: Hamburg - Germany

PostPosted: Sat Nov 17, 2007 7:03 pm    Post subject: Reply with quote

ich hab zwar herausgefunden wo der Fehler liegt, aber nicht warum.... - Hab einfach mal die Werte getauscht und es funktioniert...


Code:

 #!/bin/sh
 
 if [ 0 -lt $(grep "test der erste"  /var/beispiele/test.txt | wc -l) ]; then
    echo "testaugabe 1"
 else
       echo "testaugabe 2"
 fi



_________________
Wer Recht erkennen will, muß zuvor in richtiger Weise gezweifelt haben.
Aristoteles (384-322), griech. Philosoph, Begründer d. abendländ. Philosophie
Back to top
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4565

PostPosted: Sat Nov 17, 2007 7:06 pm    Post subject: Reply with quote

Es ist das fehlende Leerzeichen vor der schließenden eckigen Klammer...
Back to top
View user's profile Send private message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1110
Location: Schwabenländle

PostPosted: Sat Nov 17, 2007 7:12 pm    Post subject: Reply with quote

Juhu,

jetzt gehts.

1000 Dank :lol: :wink:



franzf wrote:
Es ist das fehlende Leerzeichen vor der schließenden eckigen Klammer...


:arrow: Wusste gar nicht, dass Leerzeichen in der eckigen Klammer notwendig sind. :idea:
Back to top
View user's profile Send private message
Finswimmer
Bodhisattva
Bodhisattva


Joined: 02 Sep 2004
Posts: 5467
Location: Langen (Hessen), Germany

PostPosted: Sun Nov 18, 2007 12:17 pm    Post subject: Reply with quote

3PO wrote:
Juhu,

jetzt gehts.

1000 Dank :lol: :wink:



franzf wrote:
Es ist das fehlende Leerzeichen vor der schließenden eckigen Klammer...


:arrow: Wusste gar nicht, dass Leerzeichen in der eckigen Klammer notwendig sind. :idea:


[ ] sind nur Teile von dem Kommando "test".
Und die Bash versteht es nunmal nicht, wenn du zwei Kommandos direkt aneinanderhängst.

Tobi
_________________
Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6780

PostPosted: Sun Nov 18, 2007 1:18 pm    Post subject: Reply with quote

return13 wrote:
Code:
if [ $(grep "test der erste"  /var/beispiele/test.txt | wc -l) -gt 0]; then

Code:
 if [ 0 -lt $(grep "test der erste"  /var/beispiele/test.txt | wc -l) ]; then

Was soll dieser Unsinn?
Code:
 if grep -q "test der erste" /var/beispiele/test.txt; then
Back to top
View user's profile Send private message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1110
Location: Schwabenländle

PostPosted: Sun Nov 18, 2007 1:31 pm    Post subject: Reply with quote

mv wrote:
return13 wrote:
Code:
if [ $(grep "test der erste"  /var/beispiele/test.txt | wc -l) -gt 0]; then

Code:
 if [ 0 -lt $(grep "test der erste"  /var/beispiele/test.txt | wc -l) ]; then

Was soll dieser Unsinn?
Code:
 if grep -q "test der erste" /var/beispiele/test.txt; then


Anscheinend führen mehrere Wege ans Ziel. :wink:

btw: Was macht denn grep -q??

In man steht nichts darüber.

Code:
vdr01 ~ # man grep

       -Anzahl
              gibt Anzahl Zeilen Kontext vor und nach jeder gefundenden Zeile aus

       -V     gibt die Versionsnummer auf die Standardfehlerausgabe

       -b     gibt die Position jeder gefundenen Stelle mit aus

       -c     gibt nur die Gesamtzahl der gefundenen Stellen aus

       -e Ausdruck
              sucht nach Ausdruck

       -f Datei
              Datei enthalt die Ausdrucke, nach denen gesucht werden soll.

       -h     unterdruckt die Dateinamen vor jeder Fundstelle

       -i     ignoriert GroB und Kleinschreibung

       -l     gibt nur die Dateinamen mit Fundstellen aus

       -n     gibt die Zeilennummer zu jeder Fundstelle aus

       -s     (silent) keine Ausgabe auBer Fehlermeldungen

       -v     gibt nur Zeilen aus, die den Ausdruck nicht enthalten

       -w     gibt nur Zeilen aus, in denen der Ausdruck als komplettes Wort vorkommt

       -x     gibt nur Zeilen aus, die den Ausdruck als ganze Zeile enthalten

BEISPIEL
       Mit dem Kommando

       grep '\( .... \).+\1' Handbuch.tex

       wird  in der Datei Handbuch.tex nach Zeilen gesucht, in denen ein Wort mit vier Buchstaben doppelt, aber nicht unmittel-
       bar nach dem ersten vorkommt.

SIEHE AUCH
       egrep(1) und das LunetIX Linuxhandbuch

AUTOR
       Mike Haertel, James A. Woods und David Olson
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6780

PostPosted: Sun Nov 18, 2007 1:55 pm    Post subject: Reply with quote

3PO wrote:
Anscheinend führen mehrere Wege ans Ziel. :wink:

Deswegen gibt es ja die useless use of cat awards u.ä. - Du hast nicht nur einen useless use of test, sondern auch noch einen useless use of pipe, wc and redirection award gewonnen :wink:
Quote:
btw: Was macht denn grep -q??

...alles schneller, indem es die Ausgabe unterdrückt und nach dem ersten Match abbricht. Ohne die Option hätte man
Code:
if grep  "test der erste"  /var/beispiele/test.txt >/dev/null; then

gebraucht.
Quote:
In man steht nichts darüber.

Die deutschen man-pages sind also nicht nur hoffnungslos veraltet, sondern enthalten nicht einmal die Standard-Optionen. Die echte manpage
Code:
LC_ALL=posix man grep
oder - besser - die allgemeingültigere posix-manpage
Code:
man 1p grep
dürfte die Frage beantworten.
Back to top
View user's profile Send private message
return13
Guru
Guru


Joined: 02 Feb 2004
Posts: 513
Location: Hamburg - Germany

PostPosted: Sun Nov 18, 2007 3:57 pm    Post subject: Reply with quote

man lernt doch immer dazu...
_________________
Wer Recht erkennen will, muß zuvor in richtiger Weise gezweifelt haben.
Aristoteles (384-322), griech. Philosoph, Begründer d. abendländ. Philosophie
Back to top
View user's profile Send private message
3PO
Veteran
Veteran


Joined: 26 Nov 2006
Posts: 1110
Location: Schwabenländle

PostPosted: Sun Nov 18, 2007 5:09 pm    Post subject: Reply with quote

@ mv,

danke für die wirklich mehr als sehr ausführliche Antwort. :)

:arrow: btw: mit grep --help hätte man es auch finden können: :wink: :idea:

Code:
vdr01 ~ # grep --help
Aufruf: grep [OPTION]... MUSTER [DATEI] ...
Suche nach MUSTER in jeder DATEI oder der Standardeingabe.
Beispiel: grep -i 'Hallo Welt' menu.h main.c

Auswahl und Interpretation regulärer Ausdrücke:
  -E, --extended-regexp     MUSTER ist ein erweiterter regulärer Ausdruck.
  -F, --fixed-strings       MUSTER ist eine Menge Newline-getrennter
                            Zeichenketten.
  -G, --basic-regexp        MUSTER ist ein regulärer Standardausdruck.
  -P, --perl-regexp         MUSTER ist ein regulärer Ausdruck,
                            wie Perl ihn akzeptiert.
  -e, --regexp=MUSTER       MUSTER als regulären Ausdruck verwenden.
  -f, --file=FILE           MUSTER aus DATEI lesen.
  -i, --ignore-case         Unterschied zwischen Groß- und Kleinschreibung
                            ignorieren.
  -w, --word-regexp         MUSTER paßt nur auf ganze Wörter.
  -x, --line-regexp         MUSTER paßt nur auf ganze Zeilen.
  -z, --null-data           Eine Zeile endet mit Nullbyte, nicht Newline.

Verschiedenes:
  -s, --no-messages         Fehlermeldungen unterdrücken.
  -v, --revert-match        Nicht-passende Zeilen anzeigen.
  -V, --version             Versionsnummer ausgeben und beenden.
      --help                Diese Hilfe ausgeben und beenden.
      --mmap                Wenn möglich, Eingabe in den Speicher mappen.

Ausgabekontrolle:
  -m, --max-count=ZAHL      Nach ZAHL Übereinstimmungen abbrechen.
  -b, --byte-offset         Byte-Offset anzeigen.
  -n, --line-number         Zeilennummer anzeigen.
      --line-buffered       Jede Zeile einzeln (ungepuffert) ausgeben.
  -H, --with-filename       Dateinamen bei jeder Übereinstimmung anzeigen.
  -h, --no-filename         Dateinamen nicht anzeigen.
      --label=TEXT          TEXT als Dateiname für Standardeingabe ausgeben.
  -o, --only-matching       Nur den Teil der Zeile anzeigen, die mit MUSTER
                            übereinstimmt.
  -q, --quiet, --silent     Alle normalen Ausgaben unterdrücken.
      --binary-files=TYP    Binärdateien als TYP annehmen. TYP kann
                            »binary«, »text« oder »without-match« sein.
  -a, --text                Entspricht --binary-files=text.
  -I                        Entspricht --binary-files=without-match.
  -d, --directories=AKTION  Verarbeitung von Verzeichnissen festlegen.
                            AKTION ist 'read', 'recurse', oder 'skip'.
  -D, --devices=AKTION      Verarbeitung von Gerätedateien, FIFOs und
                            Sockets festlegt. AKTION ist »read« oder »write«.
  -R, -r, --recursive       Äquivalent zu --directories=recurse.
      --include=MUSTER      Dateien untersuchen, die auf MUSTER passen.
      --exclude=MUSTER      Dateien überspringen, die auf MUSTER passen.
      --exclude-from=DATEI  Dateien überspringen, die auf ein Muster
                            in DATEI passen.
  -L, --files-without-match Nur Namen von Dateien ausgeben, die keine
                            Übereinstimmung enthalten.
  -l, --files-with-matches  Nur Dateinamen mit Übereinstimmungen ausgeben.
  -c, --count               Nur Zahl der passenden Zeilen pro Datei ausgeben.
  -Z, --null                Null-Byte nach jedem Dateinamen ausgeben.

Kontextkontrolle:
  -B, --before-context=ZAHL ZAHL Zeilen von vorausgehendem Kontext anzeigen.
  -A, --after-context=ZAHL  ZAHL Zeilen von folgendem Kontext anzeigen.
  -C, --context=ZAHL        ZAHL Zeilen Kontext anzeigen,
  -ZAHL                     Wie --context=ZAHL.
      --color[=WENN],
      --colour=[WENN]       Passende Textfragmente markieren.
                            WENN kann »always«, »never« oder »auto« sein.
  -U, --binary              CR-Zeichen am Zeilenende belassen (MSDOS).
  -u, --unix-byte-offsets   Offsets ausgeben, als fehlten CR-Zeichen (MSDOS).

»egrep« bedeutet »grep -E«. »fgrep« bedeutet »grep -F«.
Wenn DATEI fehlt oder »-« ist, wird die Standardeingabe gelesen.
Weniger als zwei DATEIen implizieren -h. Status ist 0 bei
Übereinstimmungen, 1 ohne, 2 bei Problemen.

Fehlerberichte bitte an <bug-grep@gnu.org>.
vdr01 ~ #
Back to top
View user's profile Send private message
STiGMaTa_ch
Veteran
Veteran


Joined: 28 Dec 2004
Posts: 1686
Location: Rüti ZH / Schweiz

PostPosted: Tue Nov 20, 2007 4:28 pm    Post subject: Reply with quote

mv wrote:
Was soll dieser Unsinn?
Code:
 if grep -q "test der erste" /var/beispiele/test.txt; then

Warum nicht ganz übersichtlich?

Code:
[ ! "`grep 'Das was ich suche' /var/beispiel/test.txt`" = "" ] && echo "Was ich suche ist vorhanden"


Will man wirklich noch ein "nicht vorhanden ausgeben hängt man halt ein || drann...

Code:
[ ! "`grep 'Das was ich suche' /var/beispiel/test.txt`" = "" ] && echo "Was ich suche ist vorhanden" || echo "leider nicht gefunden"


Lieber Gruss
STiGMaTa
_________________
Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum