Schrift
[thread]8717[/thread]

oneliner



<< >> 10 Einträge, 1 Seite
RPerl
 2007-02-02 20:33
#73966 #73966
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Hallo,

ich braeuchte mal einen oneliner der eine datei einliest und dann einen bestimmten string aus der datei entfernt.

waer nett wenn mir jmd mal sowas schnell tippen koennte!

thx

rperl
pq
 2007-02-02 20:36
#73967 #73967
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=RPerl,02.02.2007, 19:33]ich braeuchte mal einen oneliner der eine datei einliest und dann einen bestimmten string aus der datei entfernt.

waer nett wenn mir jmd mal sowas schnell tippen koennte![/quote]
perl -pi -e 's/string//' datei

wohl bekomm's
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
RPerl
 2007-02-02 20:38
#73968 #73968
User since
2006-11-26
384 Artikel
BenutzerIn

user image
entfernt das auch die ganze zeile indem der string z.B. *127.0.0.1* vorkommt? Und in der ganzen datei?
pq
 2007-02-02 22:49
#73969 #73969
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=RPerl,02.02.2007, 19:38]entfernt das auch die ganze zeile indem der string z.B. *127.0.0.1* vorkommt? Und in der ganzen datei?[/quote]
mein oneliner entfernt einmal pro zeile den string "string" aus einer datei.
um alle vorkommen des strings zu ersetzen, musst du die /g option
bei der substitution setzen.
weitere info zu regexes: perlretut

edit: s/einmalig/einmal pro zeile/\n\n

<!--EDIT|pq|1170451945-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Dubu
 2007-02-03 02:25
#73970 #73970
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn du alle Zeilen entfernen möchtest, in denen der String vorkommt, kannst du das so machen:
perl -ni -e '/string/ || print' datei

Wenn du alle Zeilen behalten möchtest, in denen der String vorkommt, kannst du das so machen:
perl -ni -e '/string/ && print' datei

Zu beachten ist dabei, dass "string" natürlich als regulärer Ausdruck interpretiert wird!
nepos
 2007-02-03 14:43
#73971 #73971
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, dafür würde ich nur grep auf der Kommandozeile nehmen. Da brauchts kein Perl für...
Dubu
 2007-02-03 15:29
#73972 #73972
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich bin jetzt davon ausgegangen, dass der OP kein unixoides System benutzt bzw. auf dem Zielsystem keine UNIX-Utilities zur Verfügung hat - sonst würde die Frage wahrscheinlich nicht hier auftauchen.

Unter UNIX/Linux ist für diese Aufgabe übrigens nicht nur grep(1) geeignet. Vielleicht in diesem Fall sogar weniger, denn bei grep(1) braucht man immer noch eine Zeile, um die Zieldatei zurück zu benennen. (In-Place-Edit geht nicht mit grep(1).) Kürzer als in Perl geht's z.B. mit sed(1):
sed -i -e '/string/d' datei

Sowohl die Perl- als auch die sed-Lösung editieren natürlich nicht wirklich die Datei selber, sondern legen eine neue Datei an, die anschließend automatisch umbenannt wird. Aber es ist immerhin ein Schritt weniger zum Eingeben. ;)
bloonix
 2007-02-03 15:37
#73973 #73973
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Dubu,03.02.2007, 14:29]Sowohl die Perl- als auch die sed-Lösung editieren natürlich nicht wirklich die Datei selber, sondern legen eine neue Datei an, die anschließend automatisch umbenannt wird. Aber es ist immerhin ein Schritt weniger zum Eingeben. ;)[/quote]
Und ein großer Schritt näher zum Risiko, dass die Regex falsch ist und von
der Datei kein Backup existiert. So über die Kommandozeile würde ich
niemals on-the-fly eine Datei überschreiben. ;)\n\n

<!--EDIT|opi|1170509887-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
nepos
 2007-02-03 16:00
#73974 #73974
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Btw, der -i-Schalter von sed geht nur in relativ neuen Versionen von sed.
Ronnie
 2007-02-03 16:12
#73975 #73975
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=opi,03.02.2007, 14:37]Und ein großer Schritt näher zum Risiko, dass die Regex falsch ist und von der Datei kein Backup existiert. So über die Kommandozeile würde ich niemals on-the-fly eine Datei überschreiben. ;)[/quote]
-i erlaubt die Angabe eines Suffix mit dem ein Backup angelegt wird.
<< >> 10 Einträge, 1 Seite



View all threads created 2007-02-02 20:33.