Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
-
- 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
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
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
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
Ich nutze dafuer http://www.i0i0.de/toolchest/emv und dann im sich oeffnenden vi:
Fertig!
Code: Alles auswählen
:%s, ,_,
:wq
Use ed once in a while!
-
- 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
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
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
- 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
Brudi, es ist Wochenende und es sind gerade mal 2 - 3 Stunden vergangen seit dem du die Frage gestellt hast.Mounty hat geschrieben:04.05.2019 14:48:09Schade sonst haut ihr für Andere ein Befehlzeile nach der Anderen heraus. Ist wohl nicht mein Tag.
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!
-
- 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
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
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
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
Versuche
Gruss H.
Code: Alles auswählen
rename 's/ /\_/' *
-
- 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
Unglaublich, so einfach und es funktioniert! Danke!
Wahrscheinlich in den letzten Tagen div. Male überlesen/nicht verstanden. Wieder ein "Millimeter" schlauer:-)
Gruß
Mounty
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
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
Keine Sorge. Nach dem Hinweis hast du das ja gleich eingeordnet. Ich kenne so Gefuehle und Reaktionen schon auch.Mounty hat geschrieben:04.05.2019 15:20:55Sorry (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.
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!
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
"emv" (editor mv) kannte ich auch noch nicht. Wie genial ist das denn? Danke dafür.
-
- 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
Der Editor ist ja bei emv frei wählbar, aber nur der vi/vim kann sowas --> %s, ,_, machen, oder?Meillo hat geschrieben:04.05.2019 13:45:44Ich nutze dafuer http://www.i0i0.de/toolchest/emv und dann im sich oeffnenden vi:Fertig!Code: Alles auswählen
:%s, ,_, :wq
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
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
Wie es dort steht. Wird die Option /g (global) am Ende weggelassen, wird nur das erste Vorkommen ersetzt.Mounty hat geschrieben:Wie kann man das erste Leerzeichen gegen ein Komma tauschen? Das Komma ist hier ja das "Trennzeichen" oder so.
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
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/
Code: Alles auswählen
:%s/\(\zs .\{-}\)\{2}/_/
Die ersten beiden ändern:
Code: Alles auswählen
:%s/\(\zs .\{-}\)\{1}/_/ | %s/\(\zs .\{-}\)\{1}/_/
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
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
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:
Da sed das direkt kann, könnte man alternativ auch so hantieren:
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.
Code: Alles auswählen
:%s/ /[STRG-V]x1/
:%s/ /_/
:%s/[STRG-V]x1/ /
Code: Alles auswählen
:w [FileName, falls nicht vergeben]
:! sed -i 's/ /_/2' %
:e!
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.
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
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.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.
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
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 ...
Vermutlich musst du es nur als
aufrufen. (Ungetestet)
- 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.
Oder:
- 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.
Ja, genau! Du kannst die Editierung dann auch mit gedit machen.Mounty hat geschrieben:06.05.2019 13:07:01Der Editor ist ja bei emv frei wählbar, aber nur der vi/vim kann sowas --> %s, ,_, machen, oder?Meillo hat geschrieben:04.05.2019 13:45:44Ich nutze dafuer http://www.i0i0.de/toolchest/emv und dann im sich oeffnenden vi:Fertig!Code: Alles auswählen
:%s, ,_, :wq
Vermutlich musst du es nur als
Code: Alles auswählen
VISUAL=gedit emv *
- Das % steht fuer alle Zeilen und ist nur ein Shortcut fuer 1,$ was bedeutet von der ersten bis zur letzten Zeile.Gibt es irgendwo im Netz eine Erklärung (Beschreibung) für: --> %s, ,_, ?
- 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.
Man waehlt einfach ein anderen Trennzeichen.Wie kann man das erste Leerzeichen gegen ein Komma tauschen? Das Komma ist hier ja das "Trennzeichen" oder so.
Code: Alles auswählen
s/ /,/
Code: Alles auswählen
sX X,X
Im vi leider nicht so einfach, aber wenn du von emv den ed aufrufst, dann kannst du dort sowas machen:Kann man so auch das zweite Leerzeichen gegen ein Underline tauschen? Wie?
Code: Alles auswählen
,s, ,_,2
- 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!
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
So kann man zweite Leerzeichen im vi ersetzen:
Oder fuer groessere Zahlen, z.B. das vierte Leerzeichen (eine Zahl kleiner in die geschweiften Klammern schreiben):
... bequemer waere es aber dann doch ed aufzurufen, und dort:
... das alles aber nur nebenbei, weil's mir gerade Spass macht.
Code: Alles auswählen
s,\( [^ ]*\) ,\1_,
Code: Alles auswählen
s,\(\( [^ ]*\)\{3\}\) ,\1_,
Code: Alles auswählen
s, ,_,4
w
q
Use ed once in a while!
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
Ja, das ist hübsch und eigentlich auch die naheliegende Lösung. Man muss halt nur drauf kommen...Meillo hat geschrieben:06.05.2019 16:33:55So kann man zweite Leerzeichen im vi ersetzen:
Oder fuer groessere Zahlen, z.B. das vierte Leerzeichen (eine Zahl kleiner in die geschweiften Klammern schreiben):Code: Alles auswählen
s,\( [^ ]*\) ,\1_,
Code: Alles auswählen
s,\(\( [^ ]*\)\{3\}\) ,\1_,
-
- 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
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
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
Re: Dateien umbenennen - erste Leerzeichen gegen Unterstrich tauschen
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.Mounty hat geschrieben:07.05.2019 12:40:17Nach 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.
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
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.)Problematisch finde ich auch die vielen unterschiedlichen Tools und (leicht) veränderten Schreibweisen. Das macht das Ganze nicht leichter.
Dann hast du ihn noch nicht genug kennengelernt!Wobei ich mich frage was ihr alle so am vi/vim findet, vor allem nachdem ich ed ein bischen kennengelernt habe:-)
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!