Mehrzeiliges Löschen mittels sed oder ähnlichem Tool

16/10/2014 - 16:55 von Peter Schütt | Report spam
Hallo,

gegeben ist eine LDIF-Text-Datei (test1.ldif):

...
objectClass: top
cn: Sped Verkaeufer Baltic
member: cn=Account Manager,ou=Sales Baltic States & CI,ou=Sales Department B
altic States & CIS,ou=Sales Department R.O. Poland,ou=Representative Office
Poland,ou=Business Unit Sales,ou=Organization,dc=hotzenplotz,dc=net
member: cn=Account Manager2,ou=Sales Baltic States & CI,ou=Sales Department
Baltic States & CIS,ou=Sales Department R.O. Poland,ou=Representative Offic
e Poland,ou=Business Unit Sales,ou=Organization,dc=hotzenplotz,dc=net
memberURL: ldap:///ou=Sales Baltic States & CI,ou=Sales Department Baltic St
ates & CIS,ou=Sales Department R.O. Poland,ou=Representative Office Poland,
ou=Business Unit Sales,ou=Organization,dc=hotzenplotz,dc=net??sub?(&(objectClas
s=organizationalRole)(cn=*Manager*))
seeAlso: uid=ich,ou=People,dc=hotzenplotz,dc=net
seeAlso: uid=du,ou=People,dc=hotzenplotz,dc=net
...

Nun sollen alle member-Eintràge gelöscht werden, mit folgendem Ergebnis:

...
objectClass: top
cn: Sped Verkaeufer Baltic
memberURL: ldap:///ou=Sales Baltic States & CI,ou=Sales Department Baltic St
ates & CIS,ou=Sales Department R.O. Poland,ou=Representative Office Poland,
ou=Business Unit Sales,ou=Organization,dc=hotzenplotz,dc=net??sub?(&(objectClas
s=organizationalRole)(cn=*Manager*))
seeAlso: uid=ich,ou=People,dc=hotzenplotz,dc=net
seeAlso: uid=du,ou=People,dc=hotzenplotz,dc=net
...

Folgendes habe ich probiert:

sed s/member:.*dc=net$//g test1.ldif

sed 'N; s/member:.*dc=net$//g' test1.ldif
sed 'N; s/member:.*dc=net$//' test1.ldif
sed 'N; s/member:[.|]*dc=net$//' test1.ldif

Perl habe ich auch probiert:

perl -ne 's/member:.*dc=net//; print; ' test1.ldif

Ich bin tatsàchlich mit meinem Latein nach langem Suchen und Ausprobieren am Ende. Da bin ich doch nicht der erste, der eine vergleichbare Anforderung hat.

Danke für alle Hinweise und Tips.

Ciao
Peter Schütt
 

Lesen sie die antworten

#1 Thomas Dorner
16/10/2014 - 17:53 | Warnen spam
Hallo Peter!

'.' als regulàrer Ausdruck geht immer nur bis zum Zeilenende (OK, in
Perl gibt es weitere Möglichkeiten, die passen aber nicht so einfach zur
Option "-n").

perl -ne 's/member:.*dc=net//; print; ' test1.ldif



Probiere mal

perl -pe 'if (m/^member:/) { $_ = <> while m/^( |member:)/; }' test1.ldif

Viele Grüße, Thomas

PS: Wenn es möglichst unleserlich sein soll:

perl -pe 'if(/^member:/){$_=<>while/^( |member:)/}' test1.ldif

;-)

Ähnliche fragen