Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
sed-Wissen aus der Praxis für Noobs und Geeks
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next  
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
think4urs11
Administrator
Administrator


Joined: 25 Jun 2003
Posts: 6659
Location: above the cloud

PostPosted: Sun Oct 05, 2008 10:09 pm    Post subject: Reply with quote

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
View user's profile Send private message
mastacloak
Apprentice
Apprentice


Joined: 01 Aug 2004
Posts: 170
Location: Berlin / Germany

PostPosted: Mon Oct 06, 2008 8:43 pm    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Aug 17, 2009 2:34 pm    Post subject: Reply with quote

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
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 4079

PostPosted: Tue Aug 18, 2009 10:01 am    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Tue Aug 18, 2009 10:53 am    Post subject: Reply with quote

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
View user's profile Send private message
3PO
l33t
l33t


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

PostPosted: Sat Sep 26, 2009 5:03 pm    Post subject: Reply with quote

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
View user's profile Send private message
manuels
Advocate
Advocate


Joined: 22 Nov 2003
Posts: 2146
Location: Europe

PostPosted: Sat Sep 26, 2009 5:39 pm    Post subject: Reply with quote

Klar, das geht so:
Code:
sed 's/ \ */ /g'

EDIT: den Backslash brauch man nicht unbedingt.

Und das hier würde ich gerne auf dein Post anwenden:
Code:
sed 's/\n\n/\n/g'

_________________
Build your own live cd with catalyst 2.0!
Back to top
View user's profile Send private message
3PO
l33t
l33t


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

PostPosted: Sat Sep 26, 2009 5:46 pm    Post subject: Reply with quote

Thx @ manuels,

funktioniert 100%ig. :)
Back to top
View user's profile Send private message
Evildad
Guru
Guru


Joined: 15 Apr 2004
Posts: 475

PostPosted: Sat Sep 26, 2009 11:44 pm    Post subject: Reply with quote

manuels wrote:
Und das hier würde ich gerne auf dein Post anwenden:
Code:
sed 's/\n\n/\n/g'


Gab sogar nen echten Lacher von mir :-)
Back to top
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Sep 28, 2009 6:07 am    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Oct 19, 2009 9:21 am    Post subject: Reply with quote

Auch wenn es nichts mit sed zu tun hat - falls jemand vor dem gleichen Problem steht: Mir hat das folgende Perl-Skript geholfen:

http://www.oreilly.de/catalog/regexger/chapter/kap-2l.html.
_________________
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
View user's profile Send private message
pumpkin105
n00b
n00b


Joined: 24 Oct 2009
Posts: 18

PostPosted: Sat Oct 24, 2009 7:02 pm    Post subject: Problem mit regulärem Ausdruck Reply with quote

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
View user's profile Send private message
Evildad
Guru
Guru


Joined: 15 Apr 2004
Posts: 475

PostPosted: Sat Oct 24, 2009 7:38 pm    Post subject: Reply with quote

Unschön aber tut bei mir :-)

Code:
cat testdatei | awk -F ">" '{print $2}' | awk -F "," '{print $1}'
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2086
Location: Konradsreuth (Germany)

PostPosted: Sun Oct 25, 2009 9:55 am    Post subject: Reply with quote

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
View user's profile Send private message
pumpkin105
n00b
n00b


Joined: 24 Oct 2009
Posts: 18

PostPosted: Sun Oct 25, 2009 2:52 pm    Post subject: Reply with quote

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
View user's profile Send private message
think4urs11
Administrator
Administrator


Joined: 25 Jun 2003
Posts: 6659
Location: above the cloud

PostPosted: Sun Oct 25, 2009 3:02 pm    Post subject: Reply with quote

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
View user's profile Send private message
Finswimmer
Moderator
Moderator


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

PostPosted: Sun Oct 25, 2009 3:20 pm    Post subject: Reply with quote

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
View user's profile Send private message
think4urs11
Administrator
Administrator


Joined: 25 Jun 2003
Posts: 6659
Location: above the cloud

PostPosted: Sun Oct 25, 2009 3:47 pm    Post subject: Reply with quote

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
View user's profile Send private message
pumpkin105
n00b
n00b


Joined: 24 Oct 2009
Posts: 18

PostPosted: Sun Nov 01, 2009 1:26 pm    Post subject: Reply with quote

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
View user's profile Send private message
Jean-Paul
Apprentice
Apprentice


Joined: 13 Apr 2009
Posts: 202

PostPosted: Sat Feb 06, 2010 11:56 am    Post subject: Reply with quote

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
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 4079

PostPosted: Sat Feb 06, 2010 1:03 pm    Post subject: Reply with quote

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
View user's profile Send private message
Jean-Paul
Apprentice
Apprentice


Joined: 13 Apr 2009
Posts: 202

PostPosted: Sat Feb 06, 2010 1:28 pm    Post subject: Reply with quote

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
View user's profile Send private message
ScytheMan
l33t
l33t


Joined: 30 Nov 2005
Posts: 605

PostPosted: Wed Sep 01, 2010 4:38 pm    Post subject: Reply with quote

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
View user's profile Send private message
Finswimmer
Moderator
Moderator


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

PostPosted: Wed Sep 01, 2010 4:41 pm    Post subject: Reply with quote

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
View user's profile Send private message
ScytheMan
l33t
l33t


Joined: 30 Nov 2005
Posts: 605

PostPosted: Wed Sep 01, 2010 4:44 pm    Post subject: Reply with quote

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
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
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
Page 5 of 7

 
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