Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Mounty
Beiträge: 246
Registriert: 05.01.2007 21:02:03
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Hamburg

Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Mounty » 04.05.2019 13:21:06

Moin, Moin!

Ich möchte in einem Verzeichniss alle Dateien umbenennen. Nur das erste Leerzeichen soll gegen einen Unterstrich getauscht werden.

Also --> 'blabla zzaa Aade - vbbbb' nach 'blabla_zzaa Aade - vbbbb' umwandeln.

Habt ihr vielleicht eine Lösung für mich?
Habe versucht über Google was zu finden, aber die Ergebnisse "erschlagen" mich. Einfach zuviele Daten:-)


Fragt, mit Gruß
Mounty
>> potato - woody - sarge - etch - lenny - squeeze - wheezy - jessie - stretch - buster - bullseye - [bookworm] --> trixie

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Meillo » 04.05.2019 13:45:44

Ich nutze dafuer http://www.i0i0.de/toolchest/emv und dann im sich oeffnenden vi:

Code: Alles auswählen

:%s, ,_,
:wq
Fertig! :-)
Use ed once in a while!

Mounty
Beiträge: 246
Registriert: 05.01.2007 21:02:03
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Hamburg

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Mounty » 04.05.2019 14:48:09

Bitte kein vi und was ich mit diesem emv anfangen soll ist mir ein Rätzel.
Den vi meide ich erfolgreich seit potato... und jetzt bin ich gezwungen öffentlich zuzugeben, das ich zu dumm für sowas bin.

Hatte eigentlich erhofft das das mit "Bordmitteln" zu lösen ist. Schade sonst haut ihr für Andere ein Befehlzeile nach der Anderen heraus. Ist wohl nicht mein Tag.

Mounty
>> potato - woody - sarge - etch - lenny - squeeze - wheezy - jessie - stretch - buster - bullseye - [bookworm] --> trixie

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Lord_Carlos » 04.05.2019 15:01:21

Mounty hat geschrieben: ↑ zum Beitrag ↑
04.05.2019 14:48:09
Schade sonst haut ihr für Andere ein Befehlzeile nach der Anderen heraus. Ist wohl nicht mein Tag.
Brudi, es ist Wochenende und es sind gerade mal 2 - 3 Stunden vergangen seit dem du die Frage gestellt hast.

Hier ist ein guter Anfang: https://unix.stackexchange.com/a/114587
Da musst du dann selber den sed befehl etwas anpassen.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Mounty
Beiträge: 246
Registriert: 05.01.2007 21:02:03
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Hamburg

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Mounty » 04.05.2019 15:20:55

Sorry, ich bin etwas überfordert. Ich finde so viel im Netz, allerdings beschreiben sie alles das Gleiche. Ich find da keinen Anfang. mit welchen/welchen Tool(s) ich da weiter komme.

Sorry (vor allem @Meillo), wenn ich mich hier daneben benommen habe. Das war eigentlich der Ärger über meine eigene Unfähigkeit bei solchen "Sachen", die ich hier losgelassen habe.

Vielleicht geht es ja auch mit was anderem als vi. Wenn nicht muss ich wohl mal mein altes Mauspad, mit den gängisten vi-Befehlen aus dem Keller holen.

Mit Dank und Gruß
Mounty
>> potato - woody - sarge - etch - lenny - squeeze - wheezy - jessie - stretch - buster - bullseye - [bookworm] --> trixie

halo44
Beiträge: 746
Registriert: 12.05.2015 15:19:13

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von halo44 » 04.05.2019 15:23:31

Versuche

Code: Alles auswählen

rename 's/ /\_/' *
Gruss H.

Mounty
Beiträge: 246
Registriert: 05.01.2007 21:02:03
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Hamburg

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Mounty » 04.05.2019 16:29:49

Unglaublich, so einfach und es funktioniert! Danke!

Wahrscheinlich in den letzten Tagen div. Male überlesen/nicht verstanden. Wieder ein "Millimeter" schlauer:-)


Gruß
Mounty
>> potato - woody - sarge - etch - lenny - squeeze - wheezy - jessie - stretch - buster - bullseye - [bookworm] --> trixie

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Meillo » 05.05.2019 21:07:31

Mounty hat geschrieben: ↑ zum Beitrag ↑
04.05.2019 15:20:55
Sorry (vor allem @Meillo), wenn ich mich hier daneben benommen habe. Das war eigentlich der Ärger über meine eigene Unfähigkeit bei solchen "Sachen", die ich hier losgelassen habe.
Keine Sorge. Nach dem Hinweis hast du das ja gleich eingeordnet. Ich kenne so Gefuehle und Reaktionen schon auch. ;-)

Fuer mich war's kein Problem. Ich hab einfach nur gepostet, wie ich dieses Problem bei mir loesen wuerde. Dass das nicht fuer jeden passt, war zu erwarten und dass Ansaetze mit vi fuer manche Ausserhalb des Zielspektrums liegen auch. Ich hatte aber zu dem Zeitpunkt auch nicht mehr Zeit und Ruhe um mehr dazu zu schreiben oder gar Loesungen zu suchen, die vermutlich besser passen koennten, die ich selber aber gar nicht nutze (und die ich deshalb auch noch testen haette muessen).

Diese Threads sind ja nicht nur fuer die Fragenden da, sondern werden von vielen Anderen auch gelesen. Ich denke mir: Vielleicht entdeckt der Eine oder Andere dieses grossartige `emv' dann ja auch in so einem Thread, wie ich das damals entdeckt habe ... und nicht mehr missen will. Ich verwende es sooo oft. :-)
Use ed once in a while!

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von uname » 06.05.2019 10:59:08

"emv" (editor mv) kannte ich auch noch nicht. Wie genial ist das denn? Danke dafür.

Mounty
Beiträge: 246
Registriert: 05.01.2007 21:02:03
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Hamburg

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Mounty » 06.05.2019 13:07:01

Meillo hat geschrieben: ↑ zum Beitrag ↑
04.05.2019 13:45:44
Ich nutze dafuer http://www.i0i0.de/toolchest/emv und dann im sich oeffnenden vi:

Code: Alles auswählen

:%s, ,_,
:wq
Fertig! :-)
Der Editor ist ja bei emv frei wählbar, aber nur der vi/vim kann sowas --> %s, ,_, machen, oder?

Gibt es irgendwo im Netz eine Erklärung (Beschreibung) für: --> %s, ,_, ?
(Regulärer Ausdruck? (nicht schlagen:-)

Wie kann man das erste Leerzeichen gegen ein Komma tauschen? Das Komma ist hier ja das "Trennzeichen" oder so.

Kann man so auch das zweite Leerzeichen gegen ein Underline tauschen? Wie?


Google und Co sind da irgendwie nicht sehr hilfreich, ich drehe mich da im Kreis. Oder ich erkenne das nicht.

Gruß
Mounty
>> potato - woody - sarge - etch - lenny - squeeze - wheezy - jessie - stretch - buster - bullseye - [bookworm] --> trixie

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von uname » 06.05.2019 13:15:06

Mounty hat geschrieben:Wie kann man das erste Leerzeichen gegen ein Komma tauschen? Das Komma ist hier ja das "Trennzeichen" oder so.
Wie es dort steht. Wird die Option /g (global) am Ende weggelassen, wird nur das erste Vorkommen ersetzt.
Statt , kann man als Trennzeichen auch / nutzen.

Man kann aber viel mehr nette Spielereien machen:
https://unix.stackexchange.com/question ... -on-a-line

Anleitung im Vim:

Code: Alles auswählen

:help change
Abschnitt 4.2 Substitute

Oder auch ohne Vim: https://vimhelp.org/change.txt.html
Vim im Browser ... aber ohne :help http://coolwanglu.github.io/vim.js/emterpreter/vim.html

Das Ändern des zweiten Auftretens von a durch b:

Code: Alles auswählen

:%s/\(\zsa.\{-}\)\{2}/b/
Für " " durch "_":

Code: Alles auswählen

:%s/\(\zs .\{-}\)\{2}/_/
https://stackoverflow.com/questions/307 ... ord-in-vim

Die ersten beiden ändern:

Code: Alles auswählen

:%s/\(\zs .\{-}\)\{1}/_/ | %s/\(\zs .\{-}\)\{1}/_/
Beachte, dass es jeweils das erste Auftreten ist, da das erste Auftreten ja beim zweiten Auftreten bereits geändert wurde ;-)
Geht bestimmt auch mit einen Befehl und schöner. Irgendwelche Vorschläge?

Wenn ich es richtig sehe geht \zs nur mit Vim und nicht mit Vi.

Code: Alles auswählen

:help \zs

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von tobo » 06.05.2019 14:49:50

Zumindest in vim-tiny funktioniert das \zs auch. Alternativ könnte man noch das erste Leerzeichen anderweitig "eindeutig" ersetzen, dann das neue erste Leerzeichen ersetzen und danach das alte erste Leerzeichen rückwandeln:

Code: Alles auswählen

:%s/ /[STRG-V]x1/
:%s/ /_/
:%s/[STRG-V]x1/ /
Da sed das direkt kann, könnte man alternativ auch so hantieren:

Code: Alles auswählen

:w [FileName, falls nicht vergeben]
:! sed -i 's/ /_/2' %
:e!
EDIT:
Das % im Substitutionsbefehl :%s steht als Adressersetzung für 1,$ und spricht somit die ganze Datei an. Ohne das % wäre nur die aktuelle Zeile in Bearbeitung.

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von uname » 06.05.2019 16:11:23

tobo hat geschrieben:Das % im Substitutionsbefehl :%s steht als Adressersetzung für 1,$ und spricht somit die ganze Datei an. Ohne das % wäre nur die aktuelle Zeile in Bearbeitung.
Danke für die Klarstellung. Die Frage ist wie "emv" überhaupt arbeitet. Wahrscheinlich soll es sich auf alle Zeilen beziehen und somit ist :%s richtig.

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Meillo » 06.05.2019 16:23:21

EDIT: Leider bin ich laenger unterbrochen worden und konnte meinen halbfertigen Post erst jetzt abschliessen und abschicken. Inzwischen ist manches davon schon beantwortet worden, aber was soll's ...

Mounty hat geschrieben: ↑ zum Beitrag ↑
06.05.2019 13:07:01
Meillo hat geschrieben: ↑ zum Beitrag ↑
04.05.2019 13:45:44
Ich nutze dafuer http://www.i0i0.de/toolchest/emv und dann im sich oeffnenden vi:

Code: Alles auswählen

:%s, ,_,
:wq
Fertig! :-)
Der Editor ist ja bei emv frei wählbar, aber nur der vi/vim kann sowas --> %s, ,_, machen, oder?
Ja, genau! Du kannst die Editierung dann auch mit gedit machen.

Vermutlich musst du es nur als

Code: Alles auswählen

VISUAL=gedit emv *
aufrufen. (Ungetestet)
Gibt es irgendwo im Netz eine Erklärung (Beschreibung) für: --> %s, ,_, ?
- Das % steht fuer alle Zeilen und ist nur ein Shortcut fuer 1,$ was bedeutet von der ersten bis zur letzten Zeile.
- Dann kommt ein s-Kommando (das in jeder Zeile angewendet werden soll)
- Es hat zwei Argumente, die durch beliebige Zeichen voneinander getrennt werden koennen. Typischerweise werden Slashes verwendet, die man auf der englischen Tastatur bequem mit dem kleinen Finger tipper kann. Auf der deutschen Tastatur braucht man dafuer aber Shift, so dass ich normalerweise Kommas verwende, die IMO genauso gut lesbar und schneller tippbar sind.
- Ersetzt wird: Leerzeichen. Durch: Unterstrich.
- Da nach dem dritten Trennzeichen nichts mehr kommt, wird nur das erste Auftreten ersetzt. Wenn man da ein g (fuer ``global'') hinschreibt, werden alle ersetzt.

Das war's schon. ;-)

Das s-Kommando in sed(1) funktioniert genauso.

Wie kann man das erste Leerzeichen gegen ein Komma tauschen? Das Komma ist hier ja das "Trennzeichen" oder so.
Man waehlt einfach ein anderen Trennzeichen. ;-)

Code: Alles auswählen

s/ /,/
Oder:

Code: Alles auswählen

sX X,X
Kann man so auch das zweite Leerzeichen gegen ein Underline tauschen? Wie?
Im vi leider nicht so einfach, aber wenn du von emv den ed aufrufst, dann kannst du dort sowas machen:

Code: Alles auswählen

,s, ,_,2
- ed kennt kein %, aber das Komma steht auch fuer 1,$.
- im ed kann man am Ende nicht nur ein g angeben, sondern auch eine Zahl, um nur das x-te Aufkommen zu ersetzen. Im vi geht das leider nicht.
Use ed once in a while!

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Meillo » 06.05.2019 16:33:55

So kann man zweite Leerzeichen im vi ersetzen:

Code: Alles auswählen

s,\( [^ ]*\) ,\1_,
Oder fuer groessere Zahlen, z.B. das vierte Leerzeichen (eine Zahl kleiner in die geschweiften Klammern schreiben):

Code: Alles auswählen

s,\(\( [^ ]*\)\{3\}\) ,\1_,
... bequemer waere es aber dann doch ed aufzurufen, und dort:

Code: Alles auswählen

s, ,_,4
w
q
... das alles aber nur nebenbei, weil's mir gerade Spass macht. ;-)
Use ed once in a while!

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von tobo » 06.05.2019 21:14:29

Meillo hat geschrieben: ↑ zum Beitrag ↑
06.05.2019 16:33:55
So kann man zweite Leerzeichen im vi ersetzen:

Code: Alles auswählen

s,\( [^ ]*\) ,\1_,
Oder fuer groessere Zahlen, z.B. das vierte Leerzeichen (eine Zahl kleiner in die geschweiften Klammern schreiben):

Code: Alles auswählen

s,\(\( [^ ]*\)\{3\}\) ,\1_,
Ja, das ist hübsch und eigentlich auch die naheliegende Lösung. Man muss halt nur drauf kommen...

Mounty
Beiträge: 246
Registriert: 05.01.2007 21:02:03
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Hamburg

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Mounty » 07.05.2019 12:40:17

Erstmal möchte ich mich bei allen hier recht herzlich bedanken!

Nach einer Nacht drüber schlafen, habe ich festgestellt das (wie so häufig) mein Gehirn für solche Strings/Ausdrücke nicht geschaffen ist. Bei sowas: :%s/\(\zsa.\{-}\)\{2}/b/ bin ich dann total überfordert. Problematisch finde ich auch die vielen unterschiedlichen Tools und (leicht) veränderten Schreibweisen. Das macht das Ganze nicht leichter.

Für mein Problem, habt ihr ja schon ein paar Lösung geschrieben. Die Lösung @halo44 hat den vorteil, das sie noch etwas länger in der Bash-History bleibt und man sie da dann wieder "hervorzaubern" kann.

Diese emv-Sache ist aber auch nicht schlecht, so im Zusammenspiel mit den unterschiedlichsten Editoren. Wobei ich mich frage was ihr alle so am vi/vim findet, vor allem nachdem ich ed ein bischen kennengelernt habe:-)

Gruß
Mounty
>> potato - woody - sarge - etch - lenny - squeeze - wheezy - jessie - stretch - buster - bullseye - [bookworm] --> trixie

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

Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen

Beitrag von Meillo » 07.05.2019 13:43:11

Mounty hat geschrieben: ↑ zum Beitrag ↑
07.05.2019 12:40:17
Nach einer Nacht drüber schlafen, habe ich festgestellt das (wie so häufig) mein Gehirn für solche Strings/Ausdrücke nicht geschaffen ist. Bei sowas: :%s/\(\zsa.\{-}\)\{2}/b/ bin ich dann total überfordert.
Das wundert mich ueberhaupt nicht. ;-) Das geht allen am Anfang so. Bei mir war's genauso. Aber das ist kein Problem von diesen Kommandos, sondern eine Frage von Vertrautheit und der Faehigkeit bei einer Sprache ihre Struktur, Signal und Noise, und Relevanz zu erkennen. Ein Schulanfaenger weiss auch noch nichts von der Relevanz von Satzzeichen oder Wortzwischenraeumen, wo sie fuer uns ganz klar strukturierend sind. Viele Menschen sehen keine Bedeutung wenn sie Programmcode erblicken, aber mit nur wenig Programmiererfahrung kann man schnell zumindest die groben Strukturen erfassen. So ist das auch bei so einem Ausdruck (und den meisten sed-Programmen): Fuer dich ist es nur Zeichensalat, ich dagegen erkenne eine Struktur und dadurch einen Sinn.

Zu diesem Thema will ich gerne auf folgenden Text hinweisen, den ich vor ein paar Jahren mal fuer eine Gruppe von Bibliothekaren verfasst habe: http://marmaro.de/rem/texte/pattern-matching.txt

Problematisch finde ich auch die vielen unterschiedlichen Tools und (leicht) veränderten Schreibweisen. Das macht das Ganze nicht leichter.
Wie war der Spruch von Donald Knuth nochmal: ``Unix is ten kinds of regular expressions living under one roof.'' (oder so aehnlich) Das ist sehr zutreffend, leider, aber halt der Geschichte geschuldet. (Man kann daraus zumindest eine Menge ueber die Herausforderungen von Kompatibilitaet lernen. Wie es ist wenn man es anders macht kann man beim Umstieg von Python 2 auf 3 beobachten.)

Wobei ich mich frage was ihr alle so am vi/vim findet, vor allem nachdem ich ed ein bischen kennengelernt habe:-)
Dann hast du ihn noch nicht genug kennengelernt! ;-)

Kurz gesagt: Der vi ist ein Editor mit dem man ein Leben lang effizienter beim Editieren werden kann. Durch die Moeglichkeit, kleine Editieroperationen zu groesseren zu verbinden, und ueberhaupt durch sein grosses Set an Editiermoeglichkeiten (und seine Offenheit externe Tools einzubeziehen), bietet er eine riesige Menge an Moeglichkeiten, die man noch nach Jahren besser nutzen kann. Und darueber hinaus ist er einer von wenigen Editoren, die mehr Wert auf das Aendern von Text als auf das Schreiben von Text legen. (Ich will nur xp, ddp und ~ erwaehnen.)

... und ed ist fast ;-) so maechtig ... in nur rund 2.500 Zeilen C-Code! Ich finde das schlichtweg beeindruckend.
Use ed once in a while!

Antworten