[gelöst] zeilen austauschen mittels regexp

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
mullers

[gelöst] zeilen austauschen mittels regexp

Beitrag von mullers » 19.04.2011 11:18:04

Ich möchte zwei Zeilen in mehreren Dateien austauschen, und zwar
mit einer regexp, da sich die Zeilen nicht immer an der Stelle befinden.
Schön wäre ja mit sed allein, aber ich befürchte da muss noch awk
dazu, oder?

Gruesse
henry
Zuletzt geändert von mullers am 20.04.2011 11:33:35, insgesamt 1-mal geändert.

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: zeilen austauschen mittels regexp

Beitrag von ThorstenS » 19.04.2011 13:18:55

Könntest du mal ein zwei Demo-Dateien generieren? Damit kann man dir besser helfen.
Auch sed kann mit mehreren Zeilen arbeiten (über N).

mullers

Re: zeilen austauschen mittels regexp

Beitrag von mullers » 19.04.2011 13:29:51

Mmh, vielleicht hilft das weiter...
Es ist eine html Datei. Oben gibt es also einen container
für die Navigation; eine Zeile davon ist:

Code: Alles auswählen

<li><a href="./aboutme.html">über mich</a></li>
und einige Zeilen weiter unten:

Code: Alles auswählen

<li><a href="news">news</a></li> 

Die letztere Zeile sollte nun mit der ersten den Platz tauschen.
Man könnte natürlich auch die Worte einfach austauschen, aber
ich würde auch gerne mal wissen, wie man ganze Zeilen vertauscht...

Benutzeravatar
Meillo
Moderator
Beiträge: 9279
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: zeilen austauschen mittels regexp

Beitrag von Meillo » 19.04.2011 18:26:19

Mit ed so:

Code: Alles auswählen

/line1/-1ka
/line2/-1kb
'a+1m'b+1
'b+1m'a
w
q
Die ganzen 1en kann man uebrigens auch noch weglassen. :-D
Use ed once in a while!

mullers

Re: zeilen austauschen mittels regexp

Beitrag von mullers » 19.04.2011 19:27:19

Meillo hat geschrieben:[...]
Die ganzen 1en kann man uebrigens auch noch weglassen. :-D
Das ist ja schockierend! :D

Allerdings, wenn ich es nur für eine Datei bräuchte, würde ich
es mit Emacs machen. Einen Satz markieren, dann auf dem
nächsten `transpose-sentences' und gut is'.
Oder für das Fingerballet:

Code: Alles auswählen

C-@ und C-x C-t
Irgendwas mit sed für mehrere Dateien wär' halt schön...

Benutzeravatar
Meillo
Moderator
Beiträge: 9279
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: zeilen austauschen mittels regexp

Beitrag von Meillo » 19.04.2011 22:34:56

myyers hat geschrieben:Irgendwas mit sed für mehrere Dateien wär' halt schön...
Den Sprung haettest du auch selbst schaffen koennen:

Code: Alles auswählen

for i in * ; do
    ed - "$i" <<!
/line1/-1ka
/line2/-1kb
'a+1m'b+1
'b+1m'a
w
q
!
done
Sed ist ja auch fast ein ed, allerdings kannst du das ed-Script nicht einfach an sed uebergeben da sed keine Additionen und Subtraktionen bei Zeilenadressen erlaubt. Da muesstest du schon irgendwas kompliziertes bauen. Dann lieber gleich awk nehmen: Zeilen ausgeben bis /line1/ kommt, diese speichern, auch alle weiteren Zeilen zwischenpuffern bis /line2/ kommt, dann /line2/ ausgeben, den Puffer ausgeben, /line1/ ausgeben, den Rest der Datei durchlaufen lassen. ... aber wieso nicht mit ed? Angst? :twisted:
Use ed once in a while!

mullers

Re: zeilen austauschen mittels regexp

Beitrag von mullers » 20.04.2011 07:54:03

Meillo hat geschrieben:[...]... aber wieso nicht mit ed? Angst? :twisted:
Nun ja, als ich ed las, saß ich augenblicklich furchterfüllt in der Ecke des
Zimmers und sah den Himmel sein dräuend' Pech über mich ergießen.
Nun gut, ganz so schlimm war es nicht, aber fast... :mrgreen:

An eine Schleife habe ich gar nicht gedacht, danke...

Antworten