Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
Tatsächlich sieht es danach so aus
},x123, 0x45 },x123, 0x45 },x123, 0x45 }, {0x100, 0x01},
?!?!?
Ich kapiers nicht.
Hallo Arno,
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Viele Grüße Lars
Am 18.05.21 um 16:25 schrieb Arno:
Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
Tatsächlich sieht es danach so aus
},x123, 0x45 },x123, 0x45 },x123, 0x45 }, {0x100, 0x01},
?!?!?
Ich kapiers nicht.
On Tue, May 18, 2021 at 04:46:08PM +0200, Lars Hennig wrote:
Am 18.05.21 um 16:25 schrieb Arno:
Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
[...]
Hallo Arno,
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Ich habe mir die Freiheit genommen, die Zitate umzudrehen (mag zwar TOFU, aber nicht in Mails ;)
Ich glaube, Lars hat den richtigen Riecher. Bei mir funktioniert auch Arnos sed (Tip: sed -e '...' ist besser als nur sed '...').
@Arno: mach doch mal "hexdump -C file.txt" ( | less, falls die Datei gross ist).
lg -- t
On 18.05.21 17:02, tomas@tuxteam.de wrote:
On Tue, May 18, 2021 at 04:46:08PM +0200, Lars Hennig wrote:
Am 18.05.21 um 16:25 schrieb Arno:
Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
[...]
Hallo Arno,
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Hi,
ich geb zu ich stehe mit regexp auf Kriegsfuß .. ich brauch es einfach zu selten um mir das zu merken.
Google jedesmal danach und dann findet man nur die Basics
Ich sehe die Erfinder immer vor mir wie sie wild ums Feuer tanzen und sich diebisch freuen endlich eine zwar logische aber unleserliche Syntax erschaffen zu haben die jeden nicht-Nerd in den Wahnsinn treibt.
Also das hilft so nicht ganz, weil eine Zeile auf mit a..f enden kann.
Kann mir die Zeile jemand erklären? Gibt es kein "*" das jeden Charakter beschreibt?
Genaugenommen bearbeite ich das file in 3 Schritten, weil es am Anfang die "{" braucht und 0x for die Zahlen und ein Komma dazwischen. Ich bin mir sicher man kann das auch mit einem noch unleserlichem Ausdruck hinbekommen ;)
Wieso versagt das so kläglich nur weil es im Windows-Format ist? Ich dachte schon an sowas, aber Zeilenende ist Zeilenende.
Das Dos2linux ist bei mir nicht drauf, das wäre wahrscheinlich der einfachere Weg. Aber ich war auch neugierig auf die Regexp.
Danke,
Arno
Ich habe mir die Freiheit genommen, die Zitate umzudrehen (mag zwar TOFU, aber nicht in Mails ;)
Ich glaube, Lars hat den richtigen Riecher. Bei mir funktioniert auch Arnos sed (Tip: sed -e '...' ist besser als nur sed '...').
@Arno: mach doch mal "hexdump -C file.txt" ( | less, falls die Datei gross ist).
lg -- t
Arno wrote (at 2021-05-19 07:44 +0200):
Kann mir die Zeile jemand erklären?
Der Ausdruck ([0-9])\s*$ bedeutet, fange die Ziffern, die nur durch irgendwelche Whitespace vom Zeilenende getrennt sind. und "\1" in "\1}," setze die "gefangenen" Zeichen vor dem }, wieder ein. Der Autor ging davon aus, dass das 0x0d als Whitespace erkannt wird.
Gibt es kein "*" das jeden Charakter beschreibt?
Das wäre ".*": . => ein bel. Zeichen (aber auch whitespace!) * => beliebig viele davon
Wieso versagt das so kläglich nur weil es im Windows-Format ist? Ich dachte schon an sowas, aber Zeilenende ist Zeilenende.
Eben nicht: unter Unix ist es das Zeichen 0x0a, unter DOS sind es die zwei Zeichen 0x0d 0x0a (funfact: unter MAC war es mal 0x0d)
Ich bin aber auch überrascht, dass dieser Trick bei sed nötig ist.
Mit freundlichem Gruß / With kind regards Holger Klawitter -- listen <at> klawitter <dot> de
On 19.05.21 08:09, Holger Klawitter wrote:
Arno wrote (at 2021-05-19 07:44 +0200):
Kann mir die Zeile jemand erklären?
Der Ausdruck ([0-9])\s*$ bedeutet, fange die Ziffern, die nur durch irgendwelche Whitespace vom Zeilenende getrennt sind. und "\1" in "\1}," setze die "gefangenen" Zeichen vor dem }, wieder ein. Der Autor ging davon aus, dass das 0x0d als Whitespace erkannt wird.
Gibt es kein "*" das jeden Charakter beschreibt?
Das wäre ".*": . => ein bel. Zeichen (aber auch whitespace!)
- => beliebig viele davon
Wieso versagt das so kläglich nur weil es im Windows-Format ist? Ich dachte schon an sowas, aber Zeilenende ist Zeilenende.
Eben nicht: unter Unix ist es das Zeichen 0x0a, unter DOS sind es die zwei Zeichen 0x0d 0x0a (funfact: unter MAC war es mal 0x0d)
Ich bin aber auch überrascht, dass dieser Trick bei sed nötig ist.
Mit freundlichem Gruß / With kind regards Holger Klawitter -- listen <at> klawitter <dot> de
Viele Dank, das war es :) Man braucht so ein regexp / sed Manual auf einer (großen) Seite ;) Viele Grüße, Arno
On 5/19/21 7:44 AM, Arno wrote:
On 18.05.21 17:02, tomas@tuxteam.de wrote:
On Tue, May 18, 2021 at 04:46:08PM +0200, Lars Hennig wrote:
Am 18.05.21 um 16:25 schrieb Arno:
Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
[...]
Hallo Arno,
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Hi,
ich geb zu ich stehe mit regexp auf Kriegsfuß .. ich brauch es einfach zu selten um mir das zu merken.
Google jedesmal danach und dann findet man nur die Basics
Ich sehe die Erfinder immer vor mir wie sie wild ums Feuer tanzen und sich diebisch freuen endlich eine zwar logische aber unleserliche Syntax erschaffen zu haben die jeden nicht-Nerd in den Wahnsinn treibt.
Also das hilft so nicht ganz, weil eine Zeile auf mit a..f enden kann.
Kann mir die Zeile jemand erklären? Gibt es kein "*" das jeden Charakter beschreibt?
Genaugenommen bearbeite ich das file in 3 Schritten, weil es am Anfang die "{" braucht und 0x for die Zahlen und ein Komma dazwischen. Ich bin mir sicher man kann das auch mit einem noch unleserlichem Ausdruck hinbekommen ;)
Wieso versagt das so kläglich nur weil es im Windows-Format ist? Ich dachte schon an sowas, aber Zeilenende ist Zeilenende.
Das Dos2linux ist bei mir nicht drauf, das wäre wahrscheinlich der einfachere Weg. Aber ich war auch neugierig auf die Regexp.
Ach, dos2unix braucht man doch gar nicht.
uwe@taurus:~$ xxd arnosfile.txt 00000000: 7b30 7831 3233 2c20 3078 3435 0d0a 7b30 {0x123, 0x45..{0 00000010: 7831 3233 2c20 3078 3435 0d0a 7b30 7831 x123, 0x45..{0x1 00000020: 3233 2c20 3078 3435 0d0a 0d0a 7b30 7831 23, 0x45....{0x1 00000030: 3030 2c20 3078 300d 0a 00, 0x0..
uwe@taurus:~$ perl -p -i -e 's/\r//' arnosfile.txt
uwe@taurus:~$ xxd arnosfile.txt 00000000: 7b30 7831 3233 2c20 3078 3435 0a7b 3078 {0x123, 0x45.{0x 00000010: 3132 332c 2030 7834 350a 7b30 7831 3233 123, 0x45.{0x123 00000020: 2c20 3078 3435 0a0a 7b30 7831 3030 2c20 , 0x45..{0x100, 00000030: 3078 300a 0x0.
uwe@taurus:~$ sed 's/$/},/' arnosfile.txt {0x123, 0x45}, {0x123, 0x45}, {0x123, 0x45}, }, {0x100, 0x0},
Hätte man auch in einem Schritt machen können und sogar die leere Zeile leer lassen mit:
perl -p -i -e 's/\r//; s/$/},/ if /^{/'
Wenn ich es richtig verstehe, sah der ursprüngliche Input so aus:
$ cat arnosfile.txt 123 45 123 45 123 45
100 0
(mit \r\n-Zeilenenden), richtig? Das geht auch mit sed:
sed -re 's/([0-9a-f]+)\s([0-9a-f]+)\r/{\1, \2},/' arnosfile.txt
Wenn Du noch ein -i spendierst, wird es direkt in die Datei geschrieben.
Mit (..) erstellt man eine Gruppe, das \1 auf der rechten Seite wird dann durch die erste Gruppe ersetzt.
Liebe Grüße Uwe
On 19.05.21 08:26, Uwe Kleine-König wrote:
On 5/19/21 7:44 AM, Arno wrote:
On 18.05.21 17:02, tomas@tuxteam.de wrote:
On Tue, May 18, 2021 at 04:46:08PM +0200, Lars Hennig wrote:
Am 18.05.21 um 16:25 schrieb Arno:
Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
[...]
Hallo Arno,
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Hi,
ich geb zu ich stehe mit regexp auf Kriegsfuß .. ich brauch es einfach zu selten um mir das zu merken.
Google jedesmal danach und dann findet man nur die Basics
Ich sehe die Erfinder immer vor mir wie sie wild ums Feuer tanzen und sich diebisch freuen endlich eine zwar logische aber unleserliche Syntax erschaffen zu haben die jeden nicht-Nerd in den Wahnsinn treibt.
Also das hilft so nicht ganz, weil eine Zeile auf mit a..f enden kann.
Kann mir die Zeile jemand erklären? Gibt es kein "*" das jeden Charakter beschreibt?
Genaugenommen bearbeite ich das file in 3 Schritten, weil es am Anfang die "{" braucht und 0x for die Zahlen und ein Komma dazwischen. Ich bin mir sicher man kann das auch mit einem noch unleserlichem Ausdruck hinbekommen ;)
Wieso versagt das so kläglich nur weil es im Windows-Format ist? Ich dachte schon an sowas, aber Zeilenende ist Zeilenende.
Das Dos2linux ist bei mir nicht drauf, das wäre wahrscheinlich der einfachere Weg. Aber ich war auch neugierig auf die Regexp.
Ach, dos2unix braucht man doch gar nicht.
uwe@taurus:~$ xxd arnosfile.txt 00000000: 7b30 7831 3233 2c20 3078 3435 0d0a 7b30 {0x123, 0x45..{0 00000010: 7831 3233 2c20 3078 3435 0d0a 7b30 7831 x123, 0x45..{0x1 00000020: 3233 2c20 3078 3435 0d0a 0d0a 7b30 7831 23, 0x45....{0x1 00000030: 3030 2c20 3078 300d 0a 00, 0x0..
uwe@taurus:~$ perl -p -i -e 's/\r//' arnosfile.txt
uwe@taurus:~$ xxd arnosfile.txt 00000000: 7b30 7831 3233 2c20 3078 3435 0a7b 3078 {0x123, 0x45.{0x 00000010: 3132 332c 2030 7834 350a 7b30 7831 3233 123, 0x45.{0x123 00000020: 2c20 3078 3435 0a0a 7b30 7831 3030 2c20 , 0x45..{0x100, 00000030: 3078 300a 0x0.
uwe@taurus:~$ sed 's/$/},/' arnosfile.txt {0x123, 0x45}, {0x123, 0x45}, {0x123, 0x45}, }, {0x100, 0x0},
Hätte man auch in einem Schritt machen können und sogar die leere Zeile leer lassen mit:
perl -p -i -e 's/\r//; s/$/},/ if /^{/'
Wenn ich es richtig verstehe, sah der ursprüngliche Input so aus:
$ cat arnosfile.txt 123 45 123 45 123 45
100 0
(mit \r\n-Zeilenenden), richtig? Das geht auch mit sed:
sed -re 's/([0-9a-f]+)\s([0-9a-f]+)\r/{\1, \2},/' arnosfile.txt
Wenn Du noch ein -i spendierst, wird es direkt in die Datei geschrieben.
Mit (..) erstellt man eine Gruppe, das \1 auf der rechten Seite wird dann durch die erste Gruppe ersetzt.
Liebe Grüße Uwe
Hallo Uwe, ja hier zeigt sich der Könner ;) . Ich wusste das hier mancher begeistert ist. Also noch mals vielen Dank an alle! Gruß, Arno
Hallo,
Neue SSD gekauft und nun wollte ich neben Windows Linux Mint und Ubuntu installieren. Boot soll unverschlüsselt bleiben, dann jeweils eine / für Mint und eine / für Ubuntu zum Testen und ein gemeinsam nutzbares Verzeichnis. Damit fällt /home dafür aus - ich hab an /opt gedacht und will dann jeweils Links für /home/user/download, video ... nach /opt legen. Macht doch Sinn, oder?
Soweit so gut. Also habe ich neben /boot 3 Partitionen angelegt als verschlüsseltes Volume und in diesen ext4 / und in dem anderen ext4 /opt ausgewählt.
Soweit sah das für mich gut aus. Ich hab Formatieren ausgewählt aber nicht das überschreiben mit "Nullen" weil mir das zu lang dauert. Aber beim Installieren kam dann folgende Fehlermeldung:
Der Versuch ein Dateisystem von Typ ext4 auf verschlüsseltes Volume nvme0n1p6_crypt als / einzubinden ist fehlgeschlagen
und ich soll die Partitionierung im Partitionsmenu fortsetzen.
Mh? Jemand sowas schon mal gehabt? Vielleicht hilft die Partitionen außerhalb des Installer/Partitionierungstools anlegen? Das hab ich aber noch nie gemacht mit verschlüsselten Partitionen.
Gruß, Arno
Hi Arno,
Soweit so gut. Also habe ich neben /boot 3 Partitionen angelegt als verschlüsseltes Volume und in diesen ext4 / und in dem anderen ext4 /opt ausgewählt.
Ehm.. Mint und Ubuntu sollen aus demselben Dateisystem starten? Uh-oh..?
Bin da kein Eggsperte aber ich kenne es so daß jedes System dann seine eigene "Festplatte" = Volume = Dateisystem hat.
In jedem dieser gibt es natürlich unter anderem auch /boot da /boot die Kernels und deren Schnickschnack enthält.
Was gebootet wird entscheidet die im Bios eingestellte Bootpartition bzw. der dort gestartete Code.
Frag mich nicht auch noch zu EFI, das machts glaub ich noch mal komplizierter. Kann aber sein daß man sowas sauber zu Laufen bekommt wenn man EFI nutzt.
Vielleicht geht auch die parallele Betrieb von Mint und Ubuntu im selben Dateisystem, kann sein! Ich könnte mir nur vorstellen daß Ubuntu andere Annahmen über die Organisation von /boot macht als Mint.. die Brüder haben sich ja schon vor einiger Zeit getrennt :)
Hallo Arno, mit sed -e 's/([0-9a-fA-F])\s*$/\1},/g' file.txt
sollte es gehen.
Wie geht das mit einem beliebigen Zeichen am Ende? Also ohne zu wissen ob es ein Zahl, Buchstabe, Sonderzeichen ist? Einfach allgemein?
Danke
Das kannst Du bspw. mit sed -e 's/([0-9a-zA-Z*_,.])\s*$/\1},/g' file.txt machen. Zusätzliche Sonderzeichen musst Du dann noch in die eckige Klammer schreiben. Das geht sicher auch einfacher, Experte bin ich was Regex angeht auch nicht.
Viele Grüße Lars
Am 19.05.21 um 07:44 schrieb Arno:
On 18.05.21 17:02, tomas@tuxteam.de wrote:
On Tue, May 18, 2021 at 04:46:08PM +0200, Lars Hennig wrote:
Am 18.05.21 um 16:25 schrieb Arno:
Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
[...]
Hallo Arno,
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Hi,
ich geb zu ich stehe mit regexp auf Kriegsfuß .. ich brauch es einfach zu selten um mir das zu merken.
Google jedesmal danach und dann findet man nur die Basics
Ich sehe die Erfinder immer vor mir wie sie wild ums Feuer tanzen und sich diebisch freuen endlich eine zwar logische aber unleserliche Syntax erschaffen zu haben die jeden nicht-Nerd in den Wahnsinn treibt.
Also das hilft so nicht ganz, weil eine Zeile auf mit a..f enden kann.
Kann mir die Zeile jemand erklären? Gibt es kein "*" das jeden Charakter beschreibt?
Genaugenommen bearbeite ich das file in 3 Schritten, weil es am Anfang die "{" braucht und 0x for die Zahlen und ein Komma dazwischen. Ich bin mir sicher man kann das auch mit einem noch unleserlichem Ausdruck hinbekommen ;)
Wieso versagt das so kläglich nur weil es im Windows-Format ist? Ich dachte schon an sowas, aber Zeilenende ist Zeilenende.
Das Dos2linux ist bei mir nicht drauf, das wäre wahrscheinlich der einfachere Weg. Aber ich war auch neugierig auf die Regexp.
Danke,
Arno
Ich habe mir die Freiheit genommen, die Zitate umzudrehen (mag zwar TOFU, aber nicht in Mails ;)
Ich glaube, Lars hat den richtigen Riecher. Bei mir funktioniert auch Arnos sed (Tip: sed -e '...' ist besser als nur sed '...').
@Arno: mach doch mal "hexdump -C file.txt" ( | less, falls die Datei gross ist).
lg -- t
On Wed, May 19, 2021 at 07:46:40AM +0200, Arno wrote:
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Wie geht das mit einem beliebigen Zeichen am Ende? Also ohne zu wissen ob es ein Zahl, Buchstabe, Sonderzeichen ist? Einfach allgemein?
Das musst Du genauer spezifizieren. Ich lese das mal so, dass Du das letzte Zeichen /vor/ dem Zeilenende durch etwas anderem ersetzen willst -- ich könnte es falsch gelesen haben.
Dieses Zeichen heisst auf regexpisch ".$" (also "beliebiges Zeichen, dann Zeilenende". Praktisches Beispiel:
tomas@trotzki:~$ cat /tmp/ottos-mops ottos mops trotzt otto: fort mops fort ottos mops hopst fort.
Dann:
tomas@trotzki:~$ sed -e 's/.$/#/' /tmp/ottos-mops ottos mops trotz# otto: fort mops for# ottos mops hopst fort#
(die letzte Zeile ist ein Beispiel für Sonderzeichen).
Ein gutes mentales Modell ist, Du stellst Dir vor (nehmen wir die erste Zeile oben) die regexp-Maschine nimmt sich die erste Anweisung (der Punkt) und die aktuelle Position (am Anfang, also "o".
* Erste Position: "o" - Punkt passt auf alles, also auf "o" - nächste Anweisung: Zeilenende? Nein. Pech. mit der nächsten Position weitermachen * Zweite Position: "t" - Punkt passt auf alles, also auf "t" - nächste Anweisung: Zeilenende? Nein. Pech. mit der nächsten Position weitermachen ... [ziemlich langweilige Angelegenheit; wir erreichen das letzte "t"] * Letzte Position: "t" (letztes von "trotzt") - Punkt past... blabla. - nächste Anweisung: Zeilenende? Ja. WAS HAST DU GESAGT? Jaaa! Treffer.
Wie das in Wirklichkeit gemacht wird ist natürlich noch "interessanter". Aber mit so einem mentalen Modell kannst Du den regulären Ausdrücken viel Spass abgewinnen.
lg -- t
On 5/18/21 4:25 PM, Arno wrote:
Hi, eigentlich wollte ich nur in einem File ... {0x123, 0x45 {0x123, 0x45 {0x123, 0x45
{0x100, 0x01
jeweils das Ende der Zeile mit }, abschließen.
Alle meine Versuche mit sed scheitern. Warum?
sed 's/$/},/' file.txt
müsste doch gehen oder nicht?
Tatsächlich sieht es danach so aus
},x123, 0x45 },x123, 0x45 },x123, 0x45 }, {0x100, 0x01},
?!?!?
Ich kapiers nicht.
Ich habe auch erst gestutzt, aber jetzt ist es klar: Das Zeilenende in Deiner Datei besteht auf \x0d\x0a. Die erste Zeile ist also:
{0x123, 0x45\x0d\x0a
Der sed-Befehl macht daraus:
{0x123, 0x45\x0d},\x0a
und das sieht dann so komisch in der Ausgabe aus.
Gefunden habe ich das mit xxd:
$ xxd arnosfile.txt 00000000: 7b30 7831 3233 2c20 3078 3435 0d0a 7b30 {0x123, 0x45..{0 00000010: 7831 3233 2c20 3078 3435 0d0a 7b30 7831 x123, 0x45..{0x1 00000020: 3233 2c20 3078 3435 0d0a 0d0a 7b30 7831 23, 0x45....{0x1 00000030: 3030 2c20 3078 300d 0a 00, 0x0..
$ sed 's/$/},/' arnosfile.txt | xxd 00000000: 7b30 7831 3233 2c20 3078 3435 0d7d 2c0a {0x123, 0x45.},. 00000010: 7b30 7831 3233 2c20 3078 3435 0d7d 2c0a {0x123, 0x45.},. 00000020: 7b30 7831 3233 2c20 3078 3435 0d7d 2c0a {0x123, 0x45.},. 00000030: 0d7d 2c0a 7b30 7831 3030 2c20 3078 300d .},.{0x100, 0x0. 00000040: 7d2c 0a },.
Liebe Grüße Uwe