Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
text datei mit grep bearbeiten
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
pieter_parker
Veteran
Veteran


Joined: 07 Aug 2006
Posts: 1488
Location: 127.0.0.1

PostPosted: Sun Mar 07, 2010 6:36 pm    Post subject: text datei mit grep bearbeiten Reply with quote

hab eine text datei mit 50 zeilen
jede zeile hat "x123", wie kann ich mit grep das "x123" und alles was danach in dieser zeile folgt wegschneiden ?
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6281

PostPosted: Sun Mar 07, 2010 8:09 pm    Post subject: Reply with quote

grep ist dazu das falsche Tool. Du suchst sed. Beispielsweise
Code:
sed -e "s/x123(.*)//" inputdatei >outputdatei
Back to top
View user's profile Send private message
think4urs11
Bodhisattva
Bodhisattva


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

PostPosted: Sun Mar 07, 2010 11:47 pm    Post subject: Reply with quote

mv wrote:
grep ist dazu das falsche Tool. Du suchst sed. Beispielsweise
Code:
sed -e "s/x123(.*)//" inputdatei >outputdatei

Dann aber doch gleich mit inplace-editing ...
Code:
sed -ie "s/x123(.*)//" inputdatei

_________________
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
Hollowman
Guru
Guru


Joined: 19 Apr 2007
Posts: 584

PostPosted: Mon Mar 08, 2010 11:27 am    Post subject: Reply with quote

Hi

Grep ist da genau das richtige, er will ja die ganze Zeile raus haben.

grep -v x123 DATEI

sollte dein gewünschtes Ergebnis liefern. Wenn ja dann einfach

grep -v x123 DATEI >> NEUEDATEI

Sebastian
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6281

PostPosted: Mon Mar 08, 2010 11:59 am    Post subject: Reply with quote

Hollowman wrote:
Grep ist da genau das richtige, er will ja die ganze Zeile raus haben.

Nein, er will in der Zeile den Text nach x123 (einschließlich) abschneiden, nicht die Zeile entfernen. Letzteres ginge übrigens natürlich auch mit sed:
Code:
sed -e /x123/d

Hier hat sed gegenüber grep den Vorteil, die Option -i zu kennen, falls man sie braucht (und GNU sed benutzt).

Übrigens hatte ich -i bewusst nicht angegeben: Zum Testen ist diese nämlich eine schlechte Idee, und außerdem ist sie nicht POSIX.
Back to top
View user's profile Send private message
Hollowman
Guru
Guru


Joined: 19 Apr 2007
Posts: 584

PostPosted: Mon Mar 08, 2010 2:11 pm    Post subject: Reply with quote

Quote:
wie kann ich mit grep das "x123" und alles was danach in dieser zeile folgt wegschneiden


Das steht doch x123 und alles danach wegschneiden. Das macht nu ma grep. Geht mit sed natürlich auch.

Sebastian
Back to top
View user's profile Send private message
think4urs11
Bodhisattva
Bodhisattva


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

PostPosted: Mon Mar 08, 2010 2:16 pm    Post subject: Reply with quote

Hollowman wrote:
Das steht doch x123 und alles danach wegschneiden. Das macht nu ma grep.

Seit wann?
_________________
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
Hollowman
Guru
Guru


Joined: 19 Apr 2007
Posts: 584

PostPosted: Mon Mar 08, 2010 2:22 pm    Post subject: Reply with quote

Bitteschön

Code:
eimer@Laptops ~ $ cat test
x123 das soll weg
das nicht
x123 das wieder
das wieder nicht
x123 weg isses
usw
eimer@Laptops ~ $ grep -v x123 test
das nicht
das wieder nicht
usw


Ich glaub irgendwie reden wir hier alle aneinander vorbei.

Das sed macht nur das x123 weg und lässt den Rest der Zeile stehen. Er will ja aber die ganze Zeile weg haben.

Sebastian
Back to top
View user's profile Send private message
franzf
Advocate
Advocate


Joined: 29 Mar 2005
Posts: 4408

PostPosted: Mon Mar 08, 2010 2:29 pm    Post subject: Reply with quote

Er will aber auch sowas:

Das bleibt x123 das nicht
->
Das bleibt

Und das geht mit deinem grep nicht, der haut die ganze Zeile weg!
Back to top
View user's profile Send private message
Hollowman
Guru
Guru


Joined: 19 Apr 2007
Posts: 584

PostPosted: Mon Mar 08, 2010 2:53 pm    Post subject: Reply with quote

Ah OK da hab ich nicht dran gedacht.

Sebstian
Back to top
View user's profile Send private message
think4urs11
Bodhisattva
Bodhisattva


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

PostPosted: Mon Mar 08, 2010 9:06 pm    Post subject: Reply with quote

Hollowman wrote:
Das sed macht nur das x123 weg und lässt den Rest der Zeile stehen. Er will ja aber die ganze Zeile weg haben.n

Würde aber wenig Sinn ergeben denn im ursprünglichen Post steht auch 'in *jeder* Zeile steht x123'. Würde in deinem Beispiel eine leere Ausgabe erzeugen - dafür ist grep nun wirklich oversized ;)
_________________
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
Yamakuzure
Advocate
Advocate


Joined: 21 Jun 2006
Posts: 2273
Location: Bardowick, Germany

PostPosted: Tue Mar 09, 2010 3:26 pm    Post subject: Reply with quote

sed...
Quote:
jede zeile hat "x123", wie kann ich mit grep das "x123" und alles was danach in dieser zeile folgt wegschneiden ?
Ich nehme dafür perl-pie:
Code:
sed@sed-notebook ~ $ cat test.txt
Bleibt da x123 kommt weg
x123 das geht komplett weg
Bleibt komplett da x123
Das auch x123 aber das wieder weg
sed@sed-notebook ~ $
sed@sed-notebook ~ $
sed@sed-notebook ~ $ perl -p -i.bak -e 's/^(.*)(?:x123.*)$/$1/mig' test.txt
sed@sed-notebook ~ $ cat test.txt
Bleibt da

Bleibt komplett da
Das auch
Zumindest wenn ich es richtig verstanden habe. Allerdings sind RegEx ja nicht jedermanns Sache...

Achja: dank "-i.bak" gibts die originaldatei noch als "test.txt.bak"


Edith wollte noch anmerken: Wenn du statt "x123" einen Seperator aus nur einem Zeichen bauen kannst, gehts noch einfacher. Sollte dein Seperator zum Beispiel ";" sein:
Code:
cut -d ';' -f 1 Quelldatei >> Zieldatei
Zur Not kann man das kleine regEx da oben umformen zu
Code:
perl -p -i.bak -e 's/x123/;/mig' Quelldatei

_________________
Important German:
  1. "Aha" - German reaction to pretend that you are really interested while giving no f*ck.
  2. "Tja" - German reaction to the apocalypse, nuclear war, an alien invasion or no bread in the house.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
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