View previous topic :: View next topic |
Author |
Message |
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Mon May 28, 2007 3:45 pm Post subject: Dateien via Script editieren? |
|
|
Hallo Zusammen,
ich bräuchte mal Hilfe bei der Erstellung eines Scripts.
Das Script soll folgendes machen:
- Öffne die Datei blabla.abc
- Lösche alle Zeilen die NICHT beginnen mit: abcb, oder 1234, oder asdf, oder 2222.
Ich denke mal für die Profis unter Euch sollte das kein Problem sein, oder?
1000 Dank schonmal im Voraus
cu
3PO |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Mon May 28, 2007 3:59 pm Post subject: Re: Dateien via Script editieren? |
|
|
Code: | $ fgrep -v -f ~/das.muss.weg blabla.abc |
Code: | $ cat ~/das.muss.weg
abcb
1234
asdf
2222 |
_________________ 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 |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Mon May 28, 2007 4:09 pm Post subject: |
|
|
Danke erstmal für die schnelle Antwort, aber kontest Du bitte ein klein wenig ausführlicher schreinen?
Ich bin nämlich albsoluter n00b in Shellscrips.
Danke |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Mon May 28, 2007 4:21 pm Post subject: |
|
|
3PO wrote: | Danke erstmal für die schnelle Antwort, aber kontest Du bitte ein klein wenig ausführlicher schreinen?
Ich bin nämlich albsoluter n00b in Shellscrips.
Danke |
das Kommando liest aus der Datei 'das.muss.weg' die Strings aus die gefiltert werden sollen (-f)
-v kehrt das Suchergebniss um, d.h. es werden nur noch Zeilen ausgegeben die 'Muster' nicht enthalten _________________ 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 |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Mon May 28, 2007 4:34 pm Post subject: |
|
|
hmm das mit dem 'nicht BEGINNEN' hab ich wohl überlesen... so geht es auch: Code: | sed -i.bak -r '/^1234|^2222|^abcb|^asdf/d' blabla.abc |
Erstellt zuerst ein Backup blabla.abc.bak und löcht dann aus blabla.abc alle Zeilen die mit einem der Suchmuster BEGINNEN
^Muster bedeutet: am Anfang einer neuen Zeile steht 'Muster' _________________ 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 |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Mon May 28, 2007 4:57 pm Post subject: |
|
|
Irgenwie funktioniert das nicht.
Es wird zwar eine blabla.abc.bak angelegt, aber in der originalen Datei wird nichts verändert. |
|
Back to top |
|
|
l3u Advocate
Joined: 26 Jan 2005 Posts: 2610 Location: Konradsreuth (Germany)
|
Posted: Mon May 28, 2007 6:07 pm Post subject: |
|
|
Naja, was willst du mehr als diese .bak-Datei? Dann machst halt noch ein
Code: | mv blabla.abc.bak blabla.abc |
Und gut!
Ergänzend noch die Perl-Lösung:
Code: | #!/usr/bin/perl
while(<>) {
next if /^123/ or /^456/ or /^abc/;
print;
} |
zu benutzen mittels
Code: | cat datei | script > zieldatei |
|
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Mon May 28, 2007 7:00 pm Post subject: |
|
|
Danke erstmal für die Vorschläge, ich werde mich mal die Tage damit auseinandersetzen.
btw: Für was sind denn die "^" gut? |
|
Back to top |
|
|
musv Advocate
Joined: 01 Dec 2002 Posts: 3365 Location: de
|
Posted: Mon May 28, 2007 7:07 pm Post subject: |
|
|
3PO wrote: | btw: Für was sind denn die "^" gut? |
Damit werden alle Zeilen, die mit den nachfolgend aufgelisteten Buchstaben beginnen, ignoriert - auch Negation genannt.
http://de.wikipedia.org/wiki/Regulärer_Ausdruck
PS: Das Gentoo-Forum scheint Probleme mit Umlauten in der URL zu haben |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Mon May 28, 2007 7:32 pm Post subject: |
|
|
3PO wrote: | Irgenwie funktioniert das nicht.
Es wird zwar eine blabla.abc.bak angelegt, aber in der originalen Datei wird nichts verändert. |
Lese/Schreibrechte auf blabla.abc hast du? Hier funktioniert das einwandfrei _________________ 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 |
|
|
l3u Advocate
Joined: 26 Jan 2005 Posts: 2610 Location: Konradsreuth (Germany)
|
Posted: Mon May 28, 2007 8:43 pm Post subject: |
|
|
@musv: nein. In dem Fall bedeutet das ^, daß die nachfolgende Zeichenkette am Anfang des zu untersuchenden Strings stehen muß. Was du meinst, ist was wie /[^xyz]/ |
|
Back to top |
|
|
Soneji n00b
Joined: 14 May 2005 Posts: 13 Location: Magdeburg/Germany
|
Posted: Tue May 29, 2007 6:27 pm Post subject: |
|
|
Nur der Vollstaendigkeit halber:
Falls du das File direkt bearbeiten moechtest, kann die Perl-Loesung auf folgende 2 Zeilen vereinfacht werden:
Code: |
#!/usr/bin/perl -ni
print if /^abcb/ or /^1234/ or /^2222/;
|
Zu benutzen:
Code: |
perl <skript> <zu_aenderndes_file>
|
Oder falls du das oefter brauchst natuerlich nach einem chmod:
Code: |
<skript> <zu_aenderndes_file>
|
|
|
Back to top |
|
|
l3u Advocate
Joined: 26 Jan 2005 Posts: 2610 Location: Konradsreuth (Germany)
|
Posted: Wed May 30, 2007 1:52 pm Post subject: |
|
|
Code: |
#!/usr/bin/perl -ni
print if !/^abcb/ and !/^1234/ and !/^2222/;
|
;-) |
|
Back to top |
|
|
Silicoid Tux's lil' helper
Joined: 20 Jul 2004 Posts: 144 Location: Erde
|
Posted: Wed May 30, 2007 2:52 pm Post subject: |
|
|
Code: |
#!/usr/bin/perl -ni
print if ! (/^abcb/ or /^1234/ or /^2222/);
|
|
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Wed May 30, 2007 3:32 pm Post subject: Re: Dateien via Script editieren? |
|
|
Think4UrS11 wrote: | Code: | $ fgrep -v -f ~/das.muss.weg blabla.abc |
Code: | $ cat ~/das.muss.weg
abcb
1234
asdf
2222 |
|
Statt fgrep egrep und an den Zeilenanfang das '^', dann stimmt's.
Code: | $ egrep -v -f ~/das.muss.weg blabla.abc |
Code: |
$ cat ~/das.muss.weg
^abcb
^1234
^asdf
^2222
|
|
|
Back to top |
|
|
schmutzfinger Veteran
Joined: 26 Oct 2003 Posts: 1287 Location: Dresden/Germany
|
Posted: Wed May 30, 2007 7:23 pm Post subject: |
|
|
Code: | grep -E "(^abcb|^1234|^asdf|^2222)" datei.alt > datei.neu |
Warum Dateien oder Perl-Script anlegen wenns auch in einer Zeile geht? |
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Wed May 30, 2007 9:24 pm Post subject: |
|
|
schmutzfinger wrote: | Code: | grep -E "(^abcb|^1234|^asdf|^2222)" datei.alt > datei.neu |
Warum Dateien oder Perl-Script anlegen wenns auch in einer Zeile geht? |
Weil in eine Datei beliebig viele Suchmuster passen, in Deine Kommandozeile aber nicht. |
|
Back to top |
|
|
musv Advocate
Joined: 01 Dec 2002 Posts: 3365 Location: de
|
Posted: Wed May 30, 2007 9:51 pm Post subject: |
|
|
Knieper wrote: |
Weil in eine Datei beliebig viele Suchmuster passen, in Deine Kommandozeile aber nicht. |
Auch eine Datei ist endlich.... (irgendwann mal). |
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Thu May 31, 2007 7:46 am Post subject: |
|
|
musv wrote: | Knieper wrote: |
Weil in eine Datei beliebig viele Suchmuster passen, in Deine Kommandozeile aber nicht. |
Auch eine Datei ist endlich.... (irgendwann mal). |
Das ist doch eher theoretischer Natur oder wuerdest Du dann noch egrep einsetzen? |
|
Back to top |
|
|
|