[gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von Meillo » 30.03.2023 09:19:15

JTH hat geschrieben: ↑ zum Beitrag ↑
29.03.2023 12:56:41
kalamazoo hat geschrieben: ↑ zum Beitrag ↑
28.03.2023 23:36:44

Code: Alles auswählen

$ find -type d -iname PATTERN | rev | { printf «; cut -d« -f1; } | rev | sort -h > FILE.TXT

$ find -type d -iname PATTERN | rev | { printf «; cut -d« -f2-; } | rev | sort -h > FILE.TXT
liefern mit "cut: the delimiter must be a single character" die gleiche Fehlermeldung (wobei ich nicht wirklich weiss, was hier an der Syntax falsch sein soll)
Ah, anscheinend (?!) ist (GNU) cut nicht in der Lage, mit Multibyte-Charactern umzugehen.

« besteht aus zwei Byte, im Gegensatz zu z.B. /:

Code: Alles auswählen

~$ for c in « /; do printf "$c" | xxd; done
00000000: c2ab                                     ..
00000000: 2f                                       /
Dann hätte das Aufteilen mit cut am Trennzeichen « wohl eh nicht funktionieren können.
Ich hatte cut mal genauer untersucht und auch die Multibytefaehigkeit verschiedener Implementierungen angeschaut: http://marmaro.de/docs/freiesmagazin/cut/cut.de.pdf

Damals konnte GNU cut noch nicht mit Multibytes umgehen. Allerdings ist das schon acht Jahre her. Ich wuerde vermuten, dass es inzwischen Multibytezeichen unterstuetzen sollte.
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von Meillo » 30.03.2023 09:37:29

kalamazoo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 07:22:07
Es gibt eine Menge Websites diesbezüglich, ich dachte nur, es gibt irgendeine Art Standardwerk darüber.
Wenn es um Regulaere Ausdruecke geht, dann ist das Standardwerk natuerlich der RegExp-Kurs des Debianforums. 8)

Und nun im Ernst: Das Standardwerk zu RegExps ist das Buch von Friedl. Gibt's auf Deutsch und auf Englisch. Es geht richtig zur Sache und ist dennoch fuer Einsteiger gut lesbar, da es nur die noetige Menge an Theorie und diese auf anschauliche Weise vermittelt. Das Buch meistert die Herausforderungen, die man hat, wenn man REs vermitteln will, sehr gut, insbesondere durch angepasste Typographie. Nicht umsonst ist es das Standardwerk. ... wobei der Debianforum-Kurs schon auch nicht schlecht ist. :mrgreen:


Falls du hier aber nach einem Standardwerk zum Shellscripten generell gefragt hast, so gibt es das nicht. Es gibt hunderte Buecher und Tutorials (die meisten von eher mittelmaessiger Qualitaet). Buecher, die mich wirklich ueberzeugt haben, gibt es wenige. Die meisten lernen Shellscripten aber beim Anwenden. Das geht ganz gut, weil man mit wenig beginnen und nach und nach immer etwas neues in sein Repertoire aufnehmen kann. Dabei kann man dann in verschiedene Buecher und Tutorials reinlesen und immer mal eine Kleinigkeit mitnehmen.

Das beste Buch fand ich das von Bolsky und Korn ueber die Kornshell, das inhaltlich zu 90% auch fuer die Bash passt. Das ist halt ziemlich alt und fuer heute User wohl nicht mehr ansprechend. Ansonsten hatte mir damals ein O'Reilly Buch zur Bash 3.0 (ein Fisch auf dem Cover) ganz gut gefallen. Bei den Online-Tutorials fand ich keines didaktisch richtig ueberzeugend, aber sie sind nichts desto trotz sinnvoll, um etwas dazuzulernen, halt mehr fuer den hands-on-Weg, meiner Meinung nach. Aber das moegen andere anders sehen.
Use ed once in a while!

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von tobo » 30.03.2023 09:58:33

Meillo hat geschrieben: Damals konnte GNU cut noch nicht mit Multibytes umgehen. Allerdings ist das schon acht Jahre her. Ich wuerde vermuten, dass es inzwischen Multibytezeichen unterstuetzen sollte.
Laut GNU selbst nicht.
online manual hat geschrieben: ‘-n’
Do not split multi-byte characters (no-op for now).
https://crashcourse.housegordon.org/cor ... pport.html

kalamazoo
Beiträge: 301
Registriert: 28.08.2017 11:31:49

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von kalamazoo » 30.03.2023 14:33:01

tobo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 09:06:45
Da Shell heute gleichzusetzen mit Bash ist, könnten die beiden hier was sein
Danke, als PDF heruntergeladen!
"Shell = Bash": nur bei Debian und dessen Derivativen oder ist dies ein allgemeiner Trend bei unixoiden Systemen?
Meillo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 09:37:29
Wenn es um Regulaere Ausdruecke geht, dann ist das Standardwerk natuerlich der RegExp-Kurs des Debianforums. 8)
Wenn Du diesen meinst viewtopic.php?t=183941, dann hättest Du nicht so bescheiden sein müssen und durchaus den Link angeben können :) ... ah, da gibt es noch etwas: https://wiki.debianforum.de/Regul%C3%A4 ... scher_Kurs
Das Standardwerk zu RegExps ist das Buch von Friedl. Gibt's auf Deutsch und auf Englisch.
Jeffrey Friedl: Mastering Regular Expressions -- Werde ich mir besorgen, wahrscheinlich gleich in der Originalsprache.
[Kein] Standardwerk zum Shellscripten ... Die meisten lernen Shellscripten aber beim Anwenden.
Ja, das macht Sinn.

@Meillo & den anderen -- danke für die exzellente Übersicht, ein Anfang wäre gemacht, jetzt muss ich nur noch die Zeit zum Einarbeiten finden!

... und das alles nur, weil ich bei cut in der Ausgabe einen Buchstaben mehr behalten wollte :facepalm:

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von Meillo » 30.03.2023 14:51:03

kalamazoo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 14:33:01
tobo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 09:06:45
Da Shell heute gleichzusetzen mit Bash ist, könnten die beiden hier was sein
Danke, als PDF heruntergeladen!
"Shell = Bash": nur bei Debian und dessen Derivativen oder ist dies ein allgemeiner Trend bei unixoiden Systemen?
Die Bash ist eindeutig die verbreitetste Shell. Es ist eine von mehreren bourne-kompatiblen Shells (zsh, ksh, dash, ...), die sich stark aehneln. Als Einsteiger wirst du den Unterschied oft nicht wahrnehmen.

Die BSDs nutzen oft noch eine csh (konkret tcsh) als interaktive Shell, aber das ist nicht zu empfehlen. Die wurde schon von Anfang an kritisiert. Auch wird sie selbst auf BSD nicht fuer Scripte empfohlen.

Wenn du dich an die Bash haeltst, kannst du gerade zu Beginn nichts falsch machen.

kalamazoo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 14:33:01
Das Standardwerk zu RegExps ist das Buch von Friedl. Gibt's auf Deutsch und auf Englisch.
Jeffrey Friedl: Mastering Regular Expressions -- Werde ich mir besorgen, wahrscheinlich gleich in der Originalsprache.
Genau das. Ich lese die meisten Computerbuecher auf Englisch, weil ich mit den deutschen Uebersetzungen meist unzufrieden bin. Dieses habe ich aber auf deutsch gelesen und mir ist nichts Negatives haengen geblieben. Ich denke, du kannst die Sprache frei waehlen, ohne Sorge, enttaeuscht zu werden. ;-)

kalamazoo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 14:33:01
@Meillo & den anderen -- danke für die exzellente Übersicht, ein Anfang wäre gemacht, jetzt muss ich nur noch die Zeit zum Einarbeiten finden!

... und das alles nur, weil ich bei cut in der Ausgabe einen Buchstaben mehr behalten wollte :facepalm:
:THX:
Use ed once in a while!

kalamazoo
Beiträge: 301
Registriert: 28.08.2017 11:31:49

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von kalamazoo » 30.03.2023 15:06:52

Meillo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 14:51:03
Ich lese die meisten Computerbuecher auf Englisch, weil ich mit den deutschen Uebersetzungen meist unzufrieden bin.
Ja, es beginnt schon damit, für einen englischen Begriff im Deutschen einen adäquaten Ausdruck zu finden und umgekehrt ... manchmal geht es mir so, dass ich einen mir völlig unbekannten deutschen technischen Begriff nachschaue und dann feststelle, dass er mit einem mir völlig geläufigen englischen ident ist, ich aber nie draufgekommen wäre, diese beiden gleichzusetzen.

chrbr
Beiträge: 623
Registriert: 29.10.2022 15:53:26

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von chrbr » 30.03.2023 15:37:09

kalamazoo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 14:33:01
"Shell = Bash": nur bei Debian und dessen Derivativen oder ist dies ein allgemeiner Trend bei unixoiden Systemen?
Da kann ich noch ein klein wenig hinzufügen. Bei FreeBSD ist die Default Shell für Root sh. Die sh entspricht weitgehend der dash unter Linux und ist Posix kompatibel. Für den User ist die Default Shell tcsh bzw csh. Sie ist brauchbar, hat in der Syntax aber einige Merkwürdigkeiten. Für Skripts ist sie - wie Meillo bereits schrieb - unbrauchbar. Die Korn Shell ist meiner Meinung nach schon fast eine Programmiersprache. NetBSD und OpenBSD verwenden die Korn Shell oder Derivate. Eine wohl bei echten Tastaturakrobaten beliebte Shell ist zsh. Die hat unzählige Helferlein für Programmierer. Nur Kaffee kochen kann sie nicht. Ich verwende die fish. Die ist optimiert für interaktiven Gebrauch. Skripten tue ich mit sh bzw dash.
Weshalb ich eigentlich schreibe: Dort ist eine gute Übersicht über Shells.
https://hyperpolyglot.org/unix-shells

kalamazoo
Beiträge: 301
Registriert: 28.08.2017 11:31:49

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von kalamazoo » 30.03.2023 18:00:43

chrbr hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 15:37:09
Dort ist eine gute Übersicht über Shells.
Sehr sehr interessant, diese Gegenüberstellung der verschiedenen Shells! ... nicht, dass ich jetzt alles verstanden hätte 8)

Die Korn-Shell scheint der Bash syntaktisch recht ähnlich zu sein. Wird übrigens noch irgendwo standardmäßig die ursprüngliche Bourne-Shell (bsh) verwendet, und wenn nein, warum nicht? Bezeichnet "sh" die Default-Shell eines Systems oder doch die Bourne-Shell?

uname
Beiträge: 12396
Registriert: 03.06.2008 09:33:02

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von uname » 30.03.2023 18:48:11

Auch wenn es noch weiter offtopic ist. Für zsh kann man sich GRML und dort https://grml.org/zsh/ anschauen.

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von Meillo » 30.03.2023 19:25:20

kalamazoo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 18:00:43
Die Korn-Shell scheint der Bash syntaktisch recht ähnlich zu sein.
Ja. Mal kurz zusammengefasst: Die erste Shell ueberhaupt war die Thompson-Shell. Dann kam AFAIR die Mashey-Shell. Daraufhin war die Bourne-Shell der Urvater der modernen Shells. Das war noch alles noch in den Bell Labs. In Berkeley (BSD) wurde dann die csh entwickelt, mit den zwei Features History und Commandline-Editing. Letzteres wurde durch die neu aufgekommenen Videoterminals sinnvoll. Die csh ist aber inkompatibel zu den anderen Shells. Die csh ist also ein Sonderling, der es auch nicht weit gebracht hat. In den Bell Labs hat die Kornshell (ksh) dann die Features von csh mit der Syntax der urspruenglichen Bourneshell (sh) vereint. Die ksh war dann auch die Basis fuer die POSIX-Definition der Shell Programming Language. Die bash kam etwas spaeter auf und hat ungefaehr das gleiche gemacht wie die ksh, also auch die Basis der sh mit den Features der csh. Lange Zeit war die ksh proprietaer, so dass die bash mit ihrer freien Lizenz einen Mehrwert hatte. Erst spaeter kamen mit pdksh (Public Domain ksh) und mksh (MirBSD ksh) freie Implementierungen der ksh. Die zsh war nochmal etwas spaeter dran als die bash und hat nochmal ungefaehr das gleiche gemacht, bloss hat sich das dann in zunehmend in eine mit Features vollgeladene Shell fuer den interaktiven Gebrauch entwickelt.

Manche Shells werden vor allem interaktiv genutzt: csh, zsh. Andere werden vor allem fuer Scripte genutzt: sh, dash (= Debian Almquist Shell) ... eigentlich wird nur fuer bourne-kompatible Shells programmiert. Manche Shells finden sich gleichermassen interaktiv als auch fuer Scripte im Einsatz: ksh, bash.

kalamazoo hat geschrieben: ↑ zum Beitrag ↑
30.03.2023 18:00:43
Wird übrigens noch irgendwo standardmäßig die ursprüngliche Bourne-Shell (bsh) verwendet, und wenn nein, warum nicht? Bezeichnet "sh" die Default-Shell eines Systems oder doch die Bourne-Shell?
Die Bourne-Shell wird `sh' genannt. Heute ist die alte Bourne-Shell so gut wie nirgends mehr im Einsatz. /bin/sh ist meist ein Symlink auf eine bourne-kompatible Shell, wie dash, bash.

Wenn Scripte nur POSIX-standardisierte Features verwenden, dann schreibt man ueblicherweise /bin/sh in den Shebang. Heutzutage programmieren aber viele fuer die Bash, um deren Features nutzen zu koennen. Dann sollte /bin/bash im Shebang stehen.

Ich hoffe, das hilft weiter. :-D


P.S.
Eine richtige Bourne-Shell bekommst du z.B. hier her: https://heirloom.sourceforge.net/sh.html Viel Spass damit! ;-)
Use ed once in a while!

kalamazoo
Beiträge: 301
Registriert: 28.08.2017 11:31:49

Re: [gelöst] CUT-Befehl mit Beibehaltung des Trennzeichens

Beitrag von kalamazoo » 30.03.2023 23:41:38

@uname & @Meillo :THX:

Antworten