View previous topic :: View next topic |
Author |
Message |
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Oct 05, 2008 10:09 pm Post subject: |
|
|
also so funktioniert es bei mir
Code: | sed 's/X-Header-1/Y-Header-1/;:x;n;bx' input.txt |
_________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
mastacloak Apprentice
Joined: 01 Aug 2004 Posts: 174 Location: Berlin / Germany
|
Posted: Mon Oct 06, 2008 8:43 pm Post subject: |
|
|
Think4UrS11 wrote: | also so funktioniert es bei mir
Code: | sed 's/X-Header-1/Y-Header-1/;:x;n;bx' input.txt |
|
Aber nur, wenn "X-Header-1" auch in der ersten Zeile steht.
Alternativ vielleicht auch mal ein awk-Vorschlag:
Code: | awk '{ if(!n) n=sub(/X\-Header/,"Y-Header"); print } /^$/ { n=1 }' input.txt |
Ersetzt den ersten X-Header und hört auch auf zu ersetzen, wenn die erste Leerzeile (zwischen Header und Body) durchgelaufen ist. |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Aug 17, 2009 2:34 pm Post subject: |
|
|
Ich bin mit sed nicht wirklich sattelfest - vielleicht kann mir einer der Kommandozeilengurus mal eben aushelfen:
Ich möchte in einem LaTex-Dokument alle Vorkommen von
Lemma~\ref{label}
ersetzen durch
\hyperref[label]{Lemma~\ref{label}}
Dafür habe ich mir das folgende sed-Kommando zusammengebastelt:
Code: | sed 's/Lemma~\\ref{\(.\+\)}/\\hyperref[\1]{Lemma~\\ref{\1}}/g' |
Das scheint nach einigen Tests auch ganz gut zu klappen - da das Dokument aber sehr groß ist und ich nicht alle Ersetzungen zu 100% kontrollieren kann wüßte ich gerne, ob Ihr in der sed-Zeile irgendwelchen offensichtlichen Fehler seht? _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6749
|
Posted: Tue Aug 18, 2009 10:01 am Post subject: |
|
|
schachti wrote: | Lemma~\ref{label}
ersetzen durch
\hyperref[label]{Lemma~\ref{label}} |
Das klingt für mich nicht so, als ob man das nur durch sed lösen will: Ich würde "Lemma~\ref" ersetzen durch "\thmref{Lemma}" und ein Code: | \newcommand{\thmref}[2]{\hyperref[#2]{#1~\ref{#2}}} |
am Anfang einfügen. |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Tue Aug 18, 2009 10:53 am Post subject: |
|
|
Das ist ein guter Tipp, vielen Dank! _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sat Sep 26, 2009 5:03 pm Post subject: |
|
|
Wie überflüssige Leerzeichen entfernen?
Hallo Zusammen,
ich habe folgendes Problem:
Ich lese mittels wget ein Webinterface einer Software aus und speichere das ganze dann in eine Text Datei.
Allerdings sind in diesem Textfile nun sehr viele unnötige Leerzeichen.
So nun die Frage:
Gibt es eine Möglichkeit, z.B. mit sed, die Datei zu durchsuchen und alle unnötigen Leerzeichen entfernen zu lassen?
Also im Prinzip so:
Suche im Text nach Leerzeichen, - wenn an ein einer Stelle mehr als ein Leerzeichen hintereinander sind, dann lösche alle Leerzeichen bis auf eines.
Geht das mit sed und falls ja, wie? |
|
Back to top |
|
|
manuels Advocate
Joined: 22 Nov 2003 Posts: 2146 Location: Europe
|
Posted: Sat Sep 26, 2009 5:39 pm Post subject: |
|
|
Klar, das geht so:
EDIT: den Backslash brauch man nicht unbedingt.
Und das hier würde ich gerne auf dein Post anwenden:
_________________ Build your own live cd with catalyst 2.0! |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sat Sep 26, 2009 5:46 pm Post subject: |
|
|
Thx @ manuels,
funktioniert 100%ig. |
|
Back to top |
|
|
Evildad Guru
Joined: 15 Apr 2004 Posts: 475
|
Posted: Sat Sep 26, 2009 11:44 pm Post subject: |
|
|
manuels wrote: | Und das hier würde ich gerne auf dein Post anwenden:
|
Gab sogar nen echten Lacher von mir |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Sep 28, 2009 6:07 am Post subject: |
|
|
Hat jemand einen Tipp, wie man mit sed unmittelbar aufeinander folgende doppelte Wörter finden kann (wie zum Beispiel in "hier kommt kommt doppelt vor")? Mir ist aufgefallen, dass ich beim Schreiben ab und zu mal ein Wort zwei Mal hintereinander schreibe und mir diese Fehler beim Korrekturlesen manchmal nicht auffallen... _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
|
Back to top |
|
|
pumpkin105 n00b
Joined: 24 Oct 2009 Posts: 18
|
Posted: Sat Oct 24, 2009 7:02 pm Post subject: Problem mit regulärem Ausdruck |
|
|
Hallo,
ich durchsuche gerade eine Liste mit regulären Ausdrücken. Meine Zeilen sehen so aus:
Code: | <font color="#800000">Nachname, Vorname</font> |
Mein html-Dokument besteht natürlich noch aus mehr Sachen, nur habe ich bisher mir alles so ausgeben lassen, dass ich nur die Zeilen bekomme, wo die Sachen drinne stehen, die ich benötige. Ich würde nun gerne mir mit einem weiteren grep-Befehl alle Nachnamen ausgeben lassen, dh. alles, was zwischen einem > und dem Komma in der Mitte steht. Wie ich Sachen finde, die mit > anfangen und mit , aufhören weiß ich, aber werden dann immer auch die jeweiligen Begrenzungszeichen ausgeben.
Wie muss der Befehl aussehen, dass ich keine Begrenzung bekomme?
Danke für Hilfe |
|
Back to top |
|
|
Evildad Guru
Joined: 15 Apr 2004 Posts: 475
|
Posted: Sat Oct 24, 2009 7:38 pm Post subject: |
|
|
Unschön aber tut bei mir
Code: | cat testdatei | awk -F ">" '{print $2}' | awk -F "," '{print $1}' |
|
|
Back to top |
|
|
l3u Advocate
Joined: 26 Jan 2005 Posts: 2555 Location: Konradsreuth (Germany)
|
Posted: Sun Oct 25, 2009 9:55 am Post subject: |
|
|
Code: | sed 's/.*>\(.*\),.*/\1/' |
awk muß man abgesehen davon die Daten nicht per cat über STDIN schicken, da kann man auch eine Datei als Argument abgeben, womit schon ein Befehl und eine Pipe wegfällt ;-) |
|
Back to top |
|
|
pumpkin105 n00b
Joined: 24 Oct 2009 Posts: 18
|
Posted: Sun Oct 25, 2009 2:52 pm Post subject: |
|
|
Super, das hat geklappt, jetzt fehlt nur noch eine Sache:
In dem html-Dokument, dass ich durchsuche, will ich jetzt noch Straßennamen raussuchen, die kommen immer in folgender Form vor:
Code: | 12345 Stadt - Musterweg 17<br></td> |
Es steht also nach dem Straßennamen + Hausnummer immer ein <br></td>
Ich habe es bisher so gemacht:
Code: | egrep -i -o -e '[A-Za-zßäöü][A-Za-zßöäü\ ]+ [0-9]+' |
Mir werde fast alle Straßen ausgegeben.
Bei manchen steht nur 'e 46', dh. alles nach dem ß wird ausgegeben, davor nichts, mit anderen Umlauten habe ich das gleiche Problem.
Andere Straßen stehen dort mit Str. am Ende, ich müsste also den Punkt einfügen. Wenn ich ihn in den zweiten Block mittels \. hinzufüge, bekomme ich aber keine Ausgabe. Außerdem beinhalten manche Straßennamen Namen wie Julius-Caesar-Str., wenn ich auch anch dem Bindestrich suche, werde ich das Problem bekommen ,dass ich den Bindestrich mit bekomme, der vor dem Straßennamen als Abgrenzung zur Stadt steht.
Wie kann ich den Ausdruck so ändern, dass ich das finde, was ich suche?
Danke |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Oct 25, 2009 3:02 pm Post subject: |
|
|
awk hatten wir schon, sed auch also machen wir den Rest doch einfach mal mit cut
Code: | echo "12345 Stadt - Julius-Caesar-Allee 17 c<br></td>" | cut -d" " -f4- | cut -d\< -f1 |
_________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Sun Oct 25, 2009 3:20 pm Post subject: |
|
|
Think4UrS11 wrote: | awk hatten wir schon, sed auch also machen wir den Rest doch einfach mal mit cut
Code: | echo "12345 Stadt - Julius-Caesar-Allee 17 c<br></td>" | cut -d" " -f4- | cut -d\< -f1 |
|
Was machst du mit der Stadt "Bad Kreuznach"? _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Oct 25, 2009 3:47 pm Post subject: |
|
|
Finswimmer wrote: | Was machst du mit der Stadt "Bad Kreuznach"? |
Hrmm ok das ist ein Argument; dann eben doch sed
Code: | echo "12345 New York City - Foobar an der Berg-Wießn 17 c<br></td>" | sed 's/^\([0-9]*\) \(.*\) - \([a-zA-ZßäöüÄÖÜ0-9 -]*\)<.*/\3 - \1, \2/'
Foobar an der Berg-Wießn 17 c - 12345, New York City |
bzw. nur die Straße:
Code: | echo "12345 New York City - Foobar an der Berg-Wießn 17 c<br></td>" | sed 's/.* - \([a-zA-ZßäöüÄÖÜ0-9 -]*\)<.*/\1/'
Foobar an der Berg-Wießn 17 c |
_________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
pumpkin105 n00b
Joined: 24 Oct 2009 Posts: 18
|
Posted: Sun Nov 01, 2009 1:26 pm Post subject: |
|
|
Hm, also mein Befehl sieht jetzt so aus:
Code: | cat plz01.txt | grep -i -e '<br></td>' | sed 's/^\([0-9]*\) \(.*\) - \([a-zA-ZßäöüÄÖÜ0-9 -]*\)<.*/\3 - \1, \2/' |
Und die Zeilen die mir ausgegeben werden sehen immer noch beispielsweise so aus:
Code: | Ev.Fachklinik Sonnenhöhe<br> 08645 Bad Elster - Georg-Leißner-Staße 1-4<br></td> |
|
|
Back to top |
|
|
Jean-Paul Guru
Joined: 13 Apr 2009 Posts: 307
|
Posted: Sat Feb 06, 2010 11:56 am Post subject: |
|
|
Ich habe eine Datei in der Wörter, mit folgendem Muster, stehen:
Quote: | aaa bbbb cc www-aaa dddd ee+aaa_x eeeee |
Ich möchte "aaa" direkt in der Datei löschen.
Das mache ich so: Quote: | sed -i -e "s/aaa//g;/^$/d" datei.txt |
Als Ergebnis erhalte ich jetzt aber
Quote: | bbb cc www- dddd ee+_x eeeee |
Wie bringe ich sed bei, nur das Wort "aaa" zu entfernen und die anderen Wörter, in denen "aaa" vorkommt, in Ruhe zu lassen ?
EDIT: oh, ging doch einfacher als ich dachte. Quote: | sed -e "s/^[*]*aaa//g;/^$/d" |
Jean-Paul |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6749
|
Posted: Sat Feb 06, 2010 1:03 pm Post subject: |
|
|
Jean-Paul wrote: | Wie bringe ich sed bei, nur das Wort "aaa" zu entfernen und die anderen Wörter, in denen "aaa" vorkommt, in Ruhe zu lassen? |
Die Frage ist mehr als unklar: Inwiefern unterscheidet sich das "aaa", das Du entfernen willst von den anderen? Dadurch, dass es das erste ist? Falls dies der Fall ist, lass doch das "g" (für "global") weg: In dem Fall wird nur der erste Treffer ersetzt... |
|
Back to top |
|
|
Jean-Paul Guru
Joined: 13 Apr 2009 Posts: 307
|
Posted: Sat Feb 06, 2010 1:28 pm Post subject: |
|
|
Nein, es gibt keine Reihenfolge, das "aaa" kann irgendwo stehen.
Ich habe mich zu früh gefreut, meine Lösung funktioniert nicht generell. Will ich "www.aaa" löschen, tut sed nichts.
Jean-Paul |
|
Back to top |
|
|
ScytheMan l33t
Joined: 30 Nov 2005 Posts: 605
|
Posted: Wed Sep 01, 2010 4:38 pm Post subject: |
|
|
Ich krame mal den Thread hervor, um hoffentlich mein Problem zu lösen.
Ich habe eine Musiksammlung in Amarok eingelesen, jedoch fehlen genau 11 Stücke, wenn ich mit der Dateiübersicht (also rechtsklick auf den Musikordner) abgleiche.
Ich habe meine Musik folgendermaßen strukturiert: /Musik/Album/Lied.mp3 bei Alben mit mehreren Discs /Musik/Album/CD 1/Lied.mp3
Ich habe Amarok in Verdacht, dass er mir genau 1 Album/1 CD nicht erkennt.
Jetzt zur Aufgabe:
Ich möchte alle Unterordner mit genau 11 Dateien drin ausfindig machen.
Danke schonmal für eure Tipps! |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Wed Sep 01, 2010 4:41 pm Post subject: |
|
|
Die Frage ist, wie sieht die Liste aus, mit der du die Dateien vergleichen willst?
Am einfachsten wäre es, wenn du nur die Dateinamen vergleichst. Bleiben welche übrig, kannst du den Pfad dazu suchen. _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
ScytheMan l33t
Joined: 30 Nov 2005 Posts: 605
|
Posted: Wed Sep 01, 2010 4:44 pm Post subject: |
|
|
vergleichen wäre auch ne idee.
aber das scheint mir recht kompliziert machbar müsste da höchstens auf die amarok musik datenbank irgendwie zugreifen.
ich hatte gehofft beim aussortieren nach dem 11 dateien kriterium das händisch machen zu können. |
|
Back to top |
|
|
|