Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German) Diskussionsforum
  • Search

[Suche] Hilfe beim sed Befehl

Unterhaltung über Gentoo und andere Themen: Alles was nicht in ein Support-Forum gehört.
Post Reply
  • Print view
Advanced search
18 posts • Page 1 of 1
Author
Message
3PO
Veteran
Veteran
User avatar
Posts: 1110
Joined: Sun Nov 26, 2006 11:38 am
Location: Schwabenländle

[Suche] Hilfe beim sed Befehl

  • Quote

Post by 3PO » Sat Nov 17, 2007 2:52 pm

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
Top
franzf
Advocate
Advocate
User avatar
Posts: 4565
Joined: Tue Mar 29, 2005 9:06 am

  • Quote

Post by franzf » Sat Nov 17, 2007 3:04 pm

Reicht dir denn da nicht grep?

Code: Select all

$ 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
Top
3PO
Veteran
Veteran
User avatar
Posts: 1110
Joined: Sun Nov 26, 2006 11:38 am
Location: Schwabenländle

  • Quote

Post by 3PO » Sat Nov 17, 2007 3:29 pm

hmmm....,

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

Ich dachte da mehr an so etwas:

Code: Select all

if [ xxx ] ;then
    echo "Eintrag vohanden"
    else
    echo "Eintrag nicht vohanden"
fi
Wobei ich eben bei xxx hänge..
Top
musv
Advocate
Advocate
User avatar
Posts: 3380
Joined: Sun Dec 01, 2002 4:13 pm
Location: de

  • Quote

Post by musv » Sat Nov 17, 2007 3:56 pm

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.
Top
return13
Guru
Guru
User avatar
Posts: 513
Joined: Mon Feb 02, 2004 3:09 pm
Location: Hamburg - Germany

  • Quote

Post by return13 » Sat Nov 17, 2007 4:01 pm

wenn ich mich nicht irre... :

Code: Select all

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: Select all

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
Top
3PO
Veteran
Veteran
User avatar
Posts: 1110
Joined: Sun Nov 26, 2006 11:38 am
Location: Schwabenländle

  • Quote

Post by 3PO » Sat Nov 17, 2007 6:16 pm

ich bekomme bei beiden Varianten von return13 folgende Fehlermeldung:

Code: Select all

/usr/local/src/test.sh: line 3: [: missing `]'
Was kann das sein?
Top
return13
Guru
Guru
User avatar
Posts: 513
Joined: Mon Feb 02, 2004 3:09 pm
Location: Hamburg - Germany

  • Quote

Post by return13 » Sat Nov 17, 2007 6:29 pm

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
Top
3PO
Veteran
Veteran
User avatar
Posts: 1110
Joined: Sun Nov 26, 2006 11:38 am
Location: Schwabenländle

  • Quote

Post by 3PO » Sat Nov 17, 2007 6:46 pm

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

Code: Select all

#!/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: Select all

#!/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
Top
return13
Guru
Guru
User avatar
Posts: 513
Joined: Mon Feb 02, 2004 3:09 pm
Location: Hamburg - Germany

  • Quote

Post by return13 » Sat Nov 17, 2007 7:03 pm

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

Code: Select all

 #!/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
Top
franzf
Advocate
Advocate
User avatar
Posts: 4565
Joined: Tue Mar 29, 2005 9:06 am

  • Quote

Post by franzf » Sat Nov 17, 2007 7:06 pm

Es ist das fehlende Leerzeichen vor der schließenden eckigen Klammer...
Top
3PO
Veteran
Veteran
User avatar
Posts: 1110
Joined: Sun Nov 26, 2006 11:38 am
Location: Schwabenländle

  • Quote

Post by 3PO » Sat Nov 17, 2007 7:12 pm

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:
Top
Finswimmer
Bodhisattva
Bodhisattva
User avatar
Posts: 5467
Joined: Thu Sep 02, 2004 3:46 pm
Location: Langen (Hessen), Germany

  • Quote

Post by Finswimmer » Sun Nov 18, 2007 12:17 pm

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
Top
mv
Watchman
Watchman
User avatar
Posts: 6795
Joined: Wed Apr 20, 2005 12:12 pm

  • Quote

Post by mv » Sun Nov 18, 2007 1:18 pm

return13 wrote:

Code: Select all

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

Code: Select all

 if [ 0 -lt $(grep "test der erste"  /var/beispiele/test.txt | wc -l) ]; then
Was soll dieser Unsinn?

Code: Select all

 if grep -q "test der erste" /var/beispiele/test.txt; then
Top
3PO
Veteran
Veteran
User avatar
Posts: 1110
Joined: Sun Nov 26, 2006 11:38 am
Location: Schwabenländle

  • Quote

Post by 3PO » Sun Nov 18, 2007 1:31 pm

mv wrote:
return13 wrote:

Code: Select all

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

Code: Select all

 if [ 0 -lt $(grep "test der erste"  /var/beispiele/test.txt | wc -l) ]; then
Was soll dieser Unsinn?

Code: Select all

 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: Select all

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
Top
mv
Watchman
Watchman
User avatar
Posts: 6795
Joined: Wed Apr 20, 2005 12:12 pm

  • Quote

Post by mv » Sun Nov 18, 2007 1:55 pm

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:
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: Select all

if grep  "test der erste"  /var/beispiele/test.txt >/dev/null; then
gebraucht.
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: Select all

LC_ALL=posix man grep
oder - besser - die allgemeingültigere posix-manpage

Code: Select all

man 1p grep
dürfte die Frage beantworten.
Top
return13
Guru
Guru
User avatar
Posts: 513
Joined: Mon Feb 02, 2004 3:09 pm
Location: Hamburg - Germany

  • Quote

Post by return13 » Sun Nov 18, 2007 3:57 pm

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
Top
3PO
Veteran
Veteran
User avatar
Posts: 1110
Joined: Sun Nov 26, 2006 11:38 am
Location: Schwabenländle

  • Quote

Post by 3PO » Sun Nov 18, 2007 5:09 pm

@ 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: Select all

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 ~ #
Top
STiGMaTa_ch
Veteran
Veteran
User avatar
Posts: 1686
Joined: Tue Dec 28, 2004 2:26 am
Location: Rüti ZH / Schweiz
Contact:
Contact STiGMaTa_ch
Website

  • Quote

Post by STiGMaTa_ch » Tue Nov 20, 2007 4:28 pm

mv wrote:Was soll dieser Unsinn?

Code: Select all

 if grep -q "test der erste" /var/beispiele/test.txt; then
Warum nicht ganz übersichtlich?

Code: Select all

[ ! "`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: Select all

[ ! "`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
Top
Post Reply
  • Print view

18 posts • Page 1 of 1

Return to “Diskussionsforum”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic