Eignet sich sed für Extraktion von Zeichenketten
Hab hier mal unter Batch und Shell gepostet. Antworten auf meine Fragen mit konkretem Fall sollen mir grundsätzlich zeigen, was ich mit den Werkzeugen erreichen kann und was nicht.
Datei t3.txt:
Der Hase läuft immer dann "davon", wenn ich "ihn" rufe.
1.) Das "davon" will ich mit sed+regexp augeben. Ich weiß nur dass meine Zielmenge in "" eingeschlossen ist.
2.) Ich möchte alle in "" eingeschlossenen Worte ausgeben.
3.) Ich möchte das nte Wort ausgeben, dass in "" eingeschlossen ist.
4.) Ich möchte alles ausgeben, was nicht in "" eingeschlossen ist.
5.) Grundsätzlich: Kann ich mit sed und regexp Dinge tun, für die man unter C die Stringfunktionen aus der C-Library nutzen würde.
Bei 1 bis 4 wäre ich dankbar für Lösungen, die einfach gehalten sind.
Jorquito
P.S. Nutze zum Lernen UnxUtils / Windows.
Datei t3.txt:
Der Hase läuft immer dann "davon", wenn ich "ihn" rufe.
1.) Das "davon" will ich mit sed+regexp augeben. Ich weiß nur dass meine Zielmenge in "" eingeschlossen ist.
2.) Ich möchte alle in "" eingeschlossenen Worte ausgeben.
3.) Ich möchte das nte Wort ausgeben, dass in "" eingeschlossen ist.
4.) Ich möchte alles ausgeben, was nicht in "" eingeschlossen ist.
5.) Grundsätzlich: Kann ich mit sed und regexp Dinge tun, für die man unter C die Stringfunktionen aus der C-Library nutzen würde.
Bei 1 bis 4 wäre ich dankbar für Lösungen, die einfach gehalten sind.
Jorquito
P.S. Nutze zum Lernen UnxUtils / Windows.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 179865
Url: https://administrator.de/forum/eignet-sich-sed-fuer-extraktion-von-zeichenketten-179865.html
Ausgedruckt am: 23.04.2025 um 01:04 Uhr
14 Kommentare
Neuester Kommentar
Zum Anfüttern:
Und hier ein kleines Tutorial zum Einstieg:
http://www.grymoire.com/Unix/Sed.html
lks
echo "Der Hase läuft immer dann \"davon\", wenn ich \"ihn\" rufe." | grep "\".*\"" -o
Und hier ein kleines Tutorial zum Einstieg:
http://www.grymoire.com/Unix/Sed.html
lks
Zitat von @Jorquito:
Das führt bei mir zu Fehlermeldungen, auch nach Umstellung und Anpassungen.
-o kennt mein grep nicht.
Das führt bei mir zu Fehlermeldungen, auch nach Umstellung und Anpassungen.
-o kennt mein grep nicht.
Kann sein. Ich habe grep unter linux benutzt (die GNU-version). Due könntest mal cygwin (http:www.cygwin.com) versuchen, wenn Du eine unix-Umgebung unter Windows haben willst.
Tutorials hab ich in den letzten 2 Tagen eine Menge studiert und vieles ausprobiert.
Hab es auch schon geschafft Teilstrings auszugeben, aber alles mehr Zufall, also ohne dass ich wusste, warum.
Hab es auch schon geschafft Teilstrings auszugeben, aber alles mehr Zufall, also ohne dass ich wusste, warum.
Dann als nächster Tip:
echo "Der Hase läuft immer dann \"davon\", wenn ich \"ihn\" rufe." | gawk -F "\"" ' { print $2" "$4" "$6" "$8" "$10 } '
@lks
Nur als Anmerkung: Das Einschließen einer Ausgabe in Anführungszeichen ist bei einer
genügen ...
Falls doch einmal "Anführungszeichen unter Anführungszeichen" benötigt werden, sind erstere zu verdoppeln ...
Grüße
bastla
Nur als Anmerkung: Das Einschließen einer Ausgabe in Anführungszeichen ist bei einer
echo
-Ausgabe grundsätzlich nicht erforderlich - es sollte daher für Dein Beispielecho Der Hase läuft immer dann "davon", wenn ich "ihn" rufe.| grep "\".*\"" -o
Falls doch einmal "Anführungszeichen unter Anführungszeichen" benötigt werden, sind erstere zu verdoppeln ...
Grüße
bastla
Zitat von @bastla:
@lks
Nur als Anmerkung: Das Einschließen einer Ausgabe in Anführungszeichen ist bei einer
grundsätzlich nicht erforderlich - es sollte daher für Dein Beispiel
genügen ...
@lks
Nur als Anmerkung: Das Einschließen einer Ausgabe in Anführungszeichen ist bei einer
echo
-Ausgabegrundsätzlich nicht erforderlich - es sollte daher für Dein Beispiel
echo Der Hase läuft immer dann "davon", wenn ich "ihn" rufe.| grep
> "\".*\"" -o
>
Nein, reicht nicht. Dann werden die Anführungszeichen von der shell interpretiert und nicht zum Echo durchgereicht. Den backslash braucht man auf jeden Fall. Die am Anfang und ende könnt eman weglassen, mache ich aber aus Gewohnheit dazu.
Zitat von @Jorquito:
Mich interessiert nur sed "s///"
Ich brauch Lösungen. Keine neuen Aufgaben von hoher Warte.
Bitte nochmal Frage anschauen.
Mich interessiert nur sed "s///"
Ich brauch Lösungen. Keine neuen Aufgaben von hoher Warte.
Bitte nochmal Frage anschauen.
Nagut. Ich dachte du wilst lernen. Hier dann mal wie man das erste Wort in Anführungszeichen ausgibt:
echo "Der Hase läuft immer dann \"davon\", wenn ich \"ihn\" rufe." | sed -e "s:[^\"]*\"::1 ; s:\".*::1"
Für die n-te Zeichenkette kann man das dann so gestalten, daß man entweder [^\"]* und \" in etsprechernder Anzahl hinschreibt, oder durch passende Klammerung den regulären Ausdruck anpaßt.
Hiflt Dir das wenigstens weiter?
lks
Zitat von @Jorquito:
> Zitat von @Lochkartenstanzer:
> Nagut. Ich dachte du wilst lernen.
Erst mal danke. Ich will es ja auch lernen, doch nach diesen 2 Tagen war ich einer Endlosschleife.
Beim Lernen allein aus Büchern bleiben in meinem Fall doch immer einige Fragen offen.
>
Funktioniert. Das erste Statement, da war ich schon mal. Doch mein Irrtum war,
alles in einem s/// unterbringen zu wollen.
Fragen 2-4 versuch ich dann mal alleine.
> Zitat von @Lochkartenstanzer:
> Nagut. Ich dachte du wilst lernen.
Erst mal danke. Ich will es ja auch lernen, doch nach diesen 2 Tagen war ich einer Endlosschleife.
Beim Lernen allein aus Büchern bleiben in meinem Fall doch immer einige Fragen offen.
>
> > echo "Der Hase läuft immer dann \"davon\", wenn ich \"ihn\" rufe." | sed -e
> > "s:[^\"]*\"::1 ; s:\".*::1"
> >
Funktioniert. Das erste Statement, da war ich schon mal. Doch mein Irrtum war,
alles in einem s/// unterbringen zu wollen.
Fragen 2-4 versuch ich dann mal alleine.
Bist Du weitergekommen oder brauchst Du noch Hilfe?
Dein Codebeispiel, erster Teil, wie spricht man das? Etwa so:
Ersetze bei deiner Suche alles bis zum " mit nichts, und merke es dir in Puffer 1
Lösche zuerst alles bis zum ersten Doppelapostroph und dann lösche alles nach dem nächsten Doppelapostroph.
lks
Zitat von @bastla:
@lks
> Dann werden die Anführungszeichen von der shell interpretiert und nicht zum Echo durchgereicht.
In diesem Fall wären sie zu verdoppeln ...
@lks
> Dann werden die Anführungszeichen von der shell interpretiert und nicht zum Echo durchgereicht.
In diesem Fall wären sie zu verdoppeln ...
Das ist abhängig von der Shell. Bei der bash, mit der ich vorwiegend (auch inter Windows) arbeite, hilft Verdopplung nichts. das muß man "escapen".
lks