View previous topic :: View next topic |
Author |
Message |
sirro Veteran
Joined: 20 Jul 2003 Posts: 1472 Location: aachen.nrw.de.eu
|
Posted: Wed Jan 02, 2008 10:31 am Post subject: |
|
|
3PO wrote: | 1.] sed /<Verzeicnis>/* funftioniert nicht, wenn ich diesem Verzeichnis noch andere Verzeichnisse liegen. |
Code: | find verzeichnis/ -maxdepth 1 -type f -exec sed -i 's#xxx#test#' {} \; |
Mit maxdepth kannst du einstellen, dass nur dateien der ersten Ebene des Dateibaums genommen werden falls das gewünscht ist. Falls auch Dateien in Unterverzeichnissen genommen werden sollen einfach das maxdepth weglassen.
-type f sagt, dass nur Dateien genommen werden sollen (keine Verzeichnisse oder anderes)
{} ist die aktuelle Datei.
Quote: | 2.] Leider habe ich auch noch Dateien, die keine Extension haben, - d.h. dass z.B. *.txt oder *.* in diesem Fall auch nicht geht. |
gleicher Anfang des Namens könnte auch helfen, falls du sowas hast. Sonst s.o. |
|
Back to top |
|
|
schachti Advocate
Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Wed Jan 02, 2008 10:35 am Post subject: |
|
|
ok, dann bietet sich entweder die Variante mit der for-Schleife an,
Code: |
for FILE in $(ls --color=never VERZEICHNIS); do
sed -i VERZEICHNIS/"${FILE}" -e "/^#\.*/d"
done
|
(die allerdings nicht funktioniert, wenn es Dateinamen gibt, die Leerzeichen enthalten - dann muss man mehr Aufwand treiben), oder Du ergänzt find um -maxdepth 1 (was den Vorteil hast, dass Du weitere Tests, die find bietet (letzter Zugriff, Eigentümer etc.), nutzen kannst, und dass auch Dateien mit Leerzeichen im Namen keine Probleme machen):
Code: |
find VERZEICHNIS -maxdepth 1 -type f -exec sed -i {} -e "/^$/d" \;
|
EDIT: Es muss -maxdepth 1 heißen, nicht -maxdepth 0. _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Wed Jan 02, 2008 10:38 am Post subject: |
|
|
3PO wrote: | Genau das will ich nicht. |
man pages lesen bildet
find /kram/blatest/ -depth -maxdepth 1 -type f -exec sed -ie 's/bla/blubb/' {} \; _________________ 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: Wed Jan 02, 2008 12:14 pm Post subject: |
|
|
Quote: | find /kram/blatest/ -depth -maxdepth 1 -type f -exec sed -ie 's/bla/blubb/' {} \; |
Jetzt hänge bei -exec
Code: | find: missing argument to `-exec' |
Quote: | man pages lesen bildet |
Stimmt ! |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Wed Jan 02, 2008 12:30 pm Post subject: |
|
|
nach {} muß ein Leerzeichen sein, also {} \ und nicht {}\ _________________ 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: Sun Mar 23, 2008 12:22 pm Post subject: Linefeed entfernen mit sed? |
|
|
Hallo Zusammen,
ich habe folgendes Problem.
Ich habe eine Textdatei, die folgendermasen aufgebaut ist:
Code: | text1
~irgendwastext1
text2
~irgendwastext2
text3
~irgendwastext3
...usw |
D.h. jede 2te Zeilen beginnt mit einem "~"
Wie kann ich nun mit z.B. mit sed die Ausgabe ändern in:
Code: | text1~irgendwastext1
text2~irgendwastext2
text3~irgendwastext3
...usw |
Geht das überhaupt, und falls ja, wie?
Ich bin über jeden Tipp dankbar. |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Mar 23, 2008 12:45 pm Post subject: |
|
|
meinst du sowas? Code: | sed '$!N;s/\n/ /' inputfile |
an den sed-Sammelthread angehangen _________________ 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 |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5200
|
Posted: Sun Mar 23, 2008 1:18 pm Post subject: |
|
|
Think4UrS11 wrote: | meinst du sowas? Code: | sed '$!N;s/\n/ /' inputfile |
an den sed-Sammelthread angehangen |
Code: | eher sed '$!N;s/\n~/ /' inputfile |
weil sonst hat er alles in einer zeile aber er will ja nur die zeilen mit einer "~" am anfang in die zeile davor "verschieben" _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Sun Mar 23, 2008 1:23 pm Post subject: |
|
|
Code: | sed '$!N;s/\n~/~/' t1 |
ergibt:
Code: | text1~irgendwastext1
text2~irgendwastext2
text3~irgendwastext3
testx
test2
|
Tobi
P.S. Aller guten Dinge sind drei _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
franzf Advocate
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Sun Mar 23, 2008 1:30 pm Post subject: |
|
|
firefly wrote: | Think4UrS11 wrote: | meinst du sowas? Code: | sed '$!N;s/\n/ /' inputfile |
an den sed-Sammelthread angehangen |
Code: | eher sed '$!N;s/\n~/ /' inputfile |
|
Code: | $ eher sed '$!N;s/\n~/ /' inputfile
bash: eher: command not found
|
Und man sollte evtl. noch Leerzeichen am Anfang und Ende jeder Zeile entfernen, sonst gibt es sowas:
Code: | $ sed '$!N;s/\n//' inputfile
text1 ~irgendwastext1
text2 ~irgendwastext2
text3 ~irgendwastext3
...usw
|
|
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Sun Mar 23, 2008 1:34 pm Post subject: |
|
|
Ihr habt immer dann Fehler, wenn es Zeilenanfänge gibt, die nicht mit "~" beginnen.
Denn die sollen nicht in die vorangehende Zeile rutschen...
Gehe ich jedenfalls von aus
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Sun Mar 23, 2008 1:47 pm Post subject: |
|
|
Was macht eigentlich dieses $!N;
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Sun Mar 23, 2008 2:35 pm Post subject: |
|
|
Die Anforderung war aber 'jede zweite Zeile beginnt mit ~ und soll an die vorherige angehangen werden'; d.h. auf Sonderfälle braucht nicht eingegangen zu werden; von daher war mein Vorschlag schon richtig bis auf den Tippfehler /<space>/ statt richtig // _________________ 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 |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Sun Mar 23, 2008 2:44 pm Post subject: |
|
|
Think4UrS11 wrote: | Die Anforderung war aber 'jede zweite Zeile beginnt mit ~ und soll an die vorherige angehangen werden'; d.h. auf Sonderfälle braucht nicht eingegangen zu werden; von daher war mein Vorschlag schon richtig bis auf den Tippfehler /<space>/ statt richtig // |
Red dich nur raus
$!N; verstehe ich aber immernoch nicht...
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Mon Mar 24, 2008 9:40 am Post subject: |
|
|
Danke, hat funktioniert. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sat Apr 05, 2008 5:40 pm Post subject: |
|
|
Und wieder mal eine Frage....
Ich möchte aus einer Datei mit folgendem Inhalt, das rot geschriebene entfernen:
Quote: | 01000005;0100 0005 (Old) Stream
05007C00;0500 007C00 TPS (13E)
05008000;0500 008000 (Old) FTC
01003311;0100 3311 CanalSat France (19E)
01003315;0100 3315 Canal+ France (19E)
01003317;0100 3317 CanalPro France (19E)
.......
usw.
|
Ist da sed das Richtige, oder gibt es eine andere Möglichkeit? |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5200
|
Posted: Sat Apr 05, 2008 6:01 pm Post subject: |
|
|
wenn man die Anforderung, was gelöscht werden soll in einen regulären Ausdruck ausdrücken kann, dann sollte es mit sed und co funktionieren.
EDIT:
hier der reguläre Ausdruck zu deiner Anforderung (ohne die "):
";[0-9]* [0-9]*" _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn.
Last edited by firefly on Sat Apr 05, 2008 6:06 pm; edited 1 time in total |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sat Apr 05, 2008 6:05 pm Post subject: |
|
|
Was ist ein "regulärer Ausdruck"? |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5200
|
Posted: Sat Apr 05, 2008 6:10 pm Post subject: |
|
|
3PO wrote: | Was ist ein "regulärer Ausdruck"? |
siehe http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
und so sieht dann die sed-zeile aus, mit dem Regulären ausdruck den ich im meinem letzten Post per Edit angegeben habe:
Code: | sed 's/\;[0-9]* [0-9]*//g' |
test.data wrote: | 01000005;0100 0005 (Old) Stream
05007C00;0500 007C00 TPS (13E)
05008000;0500 008000 (Old) FTC
01003311;0100 3311 CanalSat France (19E)
01003315;0100 3315 Canal+ France (19E)
01003317;0100 3317 CanalPro France (19E)
sdfgsgh;sldfjs lsdf CanalPro France (19E) |
Ergebnis:
Quote: | 01000005 (Old) Stream
05007C00C00 TPS (13E)
05008000 (Old) FTC
01003311 CanalSat France (19E)
01003315 Canal+ France (19E)
01003317 CanalPro France (19E)
sdfgsgh;sldfjs lsdf CanalPro France (19E) |
_________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
sirro Veteran
Joined: 20 Jul 2003 Posts: 1472 Location: aachen.nrw.de.eu
|
Posted: Sat Apr 05, 2008 6:21 pm Post subject: |
|
|
firefly wrote: | ";[0-9]* [0-9]*" |
Im zweiten Teil kommt ein Buchstabe (C) vor. Also eher [0-9C] oder gleich [0-9A-Z]. Kommt halt auf die Quelldaten an.
Besonders viel würde z.B. [^ ] fressen. |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5200
|
Posted: Sat Apr 05, 2008 6:36 pm Post subject: |
|
|
sirro wrote: | firefly wrote: | ";[0-9]* [0-9]*" |
Im zweiten Teil kommt ein Buchstabe (C) vor. Also eher [0-9C] oder gleich [0-9A-Z]. Kommt halt auf die Quelldaten an.
Besonders viel würde z.B. [^ ] fressen. |
ups übersehen, scheinen sich um hex zahlen zu handeln dann wäre
[0-9A-F] sinnvoller _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sat Apr 05, 2008 6:54 pm Post subject: |
|
|
Lösung gefunden.
so gehts:
Code: | sed -e "s/;[0-9A-F]* [0-9A-F]* /; /" -e "s/;[0-9A-F]* /; /" |
Danke nochmals für die Tipps. |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5200
|
Posted: Sat Apr 05, 2008 7:03 pm Post subject: |
|
|
3PO wrote: | Lösung gefunden.
so gehts:
Code: | sed -e "s/;[0-9A-F]* [0-9A-F]* /; /" -e "s/;[0-9A-F]* /; /" |
Danke nochmals für die Tipps. |
also der 2. Ausdruck ist doch unnötig, zu mindestens auf deine Anfangs angegebene Anforderung. _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sat Apr 05, 2008 7:34 pm Post subject: |
|
|
firefly wrote: | also der 2. Ausdruck ist doch unnötig, zu mindestens auf deine Anfangs angegebene Anforderung. |
Das hast du Recht...
Allerdings sind auch solche Einträge vorhanden:
Code: | 22000000;2200 Inmedia (5E/60E)
223B0000;223B Bundestag (23E)
22E20000;22E2 National TV (16E) |
(Habe ich zu spät gesehen... )
Last edited by 3PO on Sat Apr 05, 2008 7:48 pm; edited 1 time in total |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5200
|
Posted: Sat Apr 05, 2008 7:40 pm Post subject: |
|
|
der 2. Ausruck ist unnötig, da der Ausdruck
Quote: | [0-9A-F]* [0-9A-F]* |
auch deinen 2. Fall
Code: | 22000000;2200 Inmedia (5E/60E) |
abdeckt.
Denn das * im regulären ausdruck nach den [] steht für 0-n mal sprich eines der Zeichen kommt 0-n mal im gesuchten Ausdruck vor.
EDIT: Ah ok ich habe das letzte leerzeichen in deinen Ausdrücken übersehen. _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
|