View previous topic :: View next topic |
Author |
Message |
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Sun May 04, 2014 9:42 am Post subject: |
|
|
3PO wrote: | Ich bräuchte von jeder Zeile nur das siebte und das achte Zeichen, allerdings von hinten her gerechnet. |
Code: | -e 's/^.*\(..\)......$/\1/' |
|
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sun May 04, 2014 9:50 am Post subject: |
|
|
1000 THX @ mv,
das funktioniert 100%ig, allerdings ist mir die Syntax nicht so ganz klar. |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Sun May 04, 2014 11:21 am Post subject: |
|
|
^: Zeilenanfang:
.*: Gefolgt von irgendwelchen Zeichen (beliebig vielen).
\(: Das folgende merken wir uns in \1
..: Zwei beliebige Zeichen
\): Ende des Merkens
......: Sechs weitere Zeichen
$: Zeilenende
Danach wird der Treffer durch das Gemerkte ersetzt. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sun May 04, 2014 11:30 am Post subject: |
|
|
Danke, für die ausführliche Erklärung. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sun Jun 08, 2014 5:24 pm Post subject: |
|
|
Hallo Zusammen,
ich habe mal wieder ein Problem, beim Zerlegen von Strings, allerdings weiß ich nicht, ob das über Haupt mit sed geht.
Ich habe ein Script, dass mir folgende Ausgabe liefert:
Code: | 5102=deu@3,5103=mis@3;5106=deu@106
6120=deu@3,6121=mis@3,6123=mul@3;6122=deu@106
102=deu@3,103=mis@3;106=deu@106
120=deu@3,121=mis@3,122=mul@3;125=deu@106 |
Aussehen sollte das Ganze aber so:
Code: | 5102,5103,5106
6120,6123,6122
102,103,106
120,121,122,125 |
Also nur die Zahlen, vor den "=", getrennt mit Komata.
Hat Jemand eine Idee, wie man das lösen kann? |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6747
|
Posted: Mon Jun 09, 2014 6:06 pm Post subject: |
|
|
Code: | -e 's/\=[^,;]*\([,;]\|$\)/\1/g' -e 's/;/,/g' |
|
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Mon Jun 09, 2014 7:53 pm Post subject: |
|
|
1000 THX @ mv!
Funktioniert, wie immer 100%ig. |
|
Back to top |
|
|
schitthoch3 Tux's lil' helper
Joined: 22 Mar 2004 Posts: 94
|
Posted: Mon Jun 29, 2015 5:54 pm Post subject: Wieder einmal VDR channels.conf |
|
|
Hallo zusammen
Mein Kabelprovider sendet leider bewusst falsche DVB-C Senderdaten. Siehe dazu mehr hier. Ich habe nun eine channels.conf für VDR in der alle Sender zweimal (an zwei unterschiedlichen Zeilen) gelistet sind. Das ist die Ausgangslage. Ein Beispiel:
Auszug aus der channels.conf wrote: |
[...]
ZDF HD;upc:514000:M256:C:6900:80=27:81=deu@3,82=mis@3,83=mul@3;91=deu@106:110:0:9007:1:78:0
[...]
ZDF HD;upc:514000:M256:C:6900:0:0:0:0:9007:1:83:0
[...]
|
Ich möchte nun von oben herab ausgehend für alle Kanäle nach dem Namen suchen (erster String vor dem Semikolon) und vom ersten Eintrag mit gleichem Namen den zweitletzten String (7 durch den String des zweiten Eintrages mit gleichem Namen ersetzen (83). Danach soll der zweite Eintrag gleichen Namens gelöscht werden. Sobald es keinen Zweiteintrag mit gleichem Sendernamen mehr gibt, soll das Script enden.
Am Schluss soll die channels.conf jeden Kanal nur einmal enthalten (die unteren Zeilen-Einträge gelöscht) mit "gemergten" Inhalten also z.B.
ZDF HD;upc:514000:M256:C:6900:80=27:81=deu@3,82=mis@3,83=mul@3;91=deu@106:110:0:9007:1:83:0
Anmerkung: Die Zeilen Enden immer mit :0, dass heisst man kann in der oberen Zeile des Namenpaares alles ab dem zweitletzten : ersetzen.
Ich hoffe ich konnte dies jetzt sinnvoll erklären. Ansonsten bitte nachfragen.
Hat da jemand eine Lösung? |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Fri Jul 01, 2016 5:49 pm Post subject: |
|
|
Hallo Zusammen,
ich stehe mal wieder auf dem Schlauch.
Ich habe ein Script, das mir eine Datei nach folgendem Schema füllt:
Code: | foo="1"
bar="abc"
xyz="0,2" |
Soweit, so gut. Leider aber kommt es vor, dass auch solche Einträge erzeugt werden:
Code: | foo="1" aa"er
bar="abc" 23 |
Meine Frage ist nun, wie kann ich mit sed, in jeder Zeile, alles löschen, was nach dem zweiten " kommt? |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5175
|
Posted: Fri Jul 01, 2016 7:36 pm Post subject: |
|
|
test.txt wrote: | foo="1"
bar="abc"
xyz="0,2"
foo="1" aa"er
bar="abc" 23
|
Code: | sed -e 's/\([a\-z]*="[^"]*"\).*$/\1/g' < test.txt |
Quote: | foo="1"
bar="abc"
xyz="0,2"
foo="1"
bar="abc"
|
Es wird der gewünschte text in eine gruppe selektiert und die ganze zeile wird dann mit dem content der gruppe ersetzt _________________ 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 |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5175
|
Posted: Fri Jul 01, 2016 7:38 pm Post subject: |
|
|
3PO wrote: |
Soweit, so gut. Leider aber kommt es vor, dass auch solche Einträge erzeugt werden:
Code: | foo="1" aa"er
bar="abc" 23 |
|
Wäre es nicht besser das script zu fixen? _________________ 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: Fri Jul 01, 2016 7:45 pm Post subject: |
|
|
firefly wrote: |
Wäre es nicht besser das script zu fixen? |
Ist doch gefixt, mit:
Code: | sed -e 's/\([a\-z]*="[^"]*"\).*$/\1/g' < test.txt |
BTW: 1000 THX für die schnelle Hilfe! |
|
Back to top |
|
|
|
|
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
|
|