ubuntuusers.de

Shell - Teilstring entfernen

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

ThunderWar

Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Salut,

ich suche einen kurzen Befehl, um ein ".mp3" aus einem String zu entfernen, damit ich nur noch den nackten Titel übrig habe. Habe bei Google leider nicht wirklich etwas hilfreiches gefunden, könnt ihr mir mal evnetuell kurz helfen?

Holger63

Avatar von Holger63

Anmeldungsdatum:
8. Juni 2006

Beiträge: 695

Wohnort: Wesel, Nordrhein-Westfalen

basename sollte dir weiterhelfen:

NAME=$(basename "$FILENAME" .mp3)

Es bleibt nur der nackte Titel ohne Verzeichnis und Erweiterung übrig.

Gruß, Holger

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Danke, klappt wunderbar!

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Noch ein weiteres kleines Problemchen...

"lalelu_xyz.mp3"

Ich muss "_xyz" wegbekommen, gibt es dafür auch einen Befehl? Also es könnte aber auch "blubb_abcdefgh.mp3 dort stehen, dann müsste "_abcdefgh" weg.

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: 5653

Wohnort: Confoederatio Helvetica

awk -F "[_.]" '{print $1"."$3}'

Geht nicht, sobald nebst dem . vor der Dateiendung noch ein weiterer dazukommt,
aber das liesse sich notfalls auch anders loesen, wenn Du solche Faelle hast.
Man koennte dann einfach $1 ausgeben, plus die letzten 4 Buchstaben der Zeile.

Fuchs

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Okay, also wenn ich jetzt folgendes habe: muh="lalala_xyzd.mp3"

Was muss ich dann jetzt tun?

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: 5653

Wohnort: Confoederatio Helvetica

muh=echo "lalala_xyzd.mp3" | awk -F "[_.]" '{print $1"."$3}'

Und ja, das geht sicher schoener, man frage mich,
wenn draussen weniger als 20 Grad Celsius herrschen.

(Wenn Du tonnenweise solche Strings hast, dann machst Du in awk
besser eine Funktion und laesst die Strings dann durch diese laufen)

Fuchs

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

fuchsfuchsfuchs hat geschrieben:

muh=echo "lalala_xyzd.mp3" | awk -F "[_.]" '{print $1"."$3}'

Danke, klappt soweit.

fuchsfuchsfuchs hat geschrieben:

(Wenn Du tonnenweise solche Strings hast, dann machst Du in awk
besser eine Funktion und laesst die Strings dann durch diese laufen)

Nein, soviele Strings sind es dann doch nicht.

So, dann steigern wir mal den Schwierigkeitsgrad: 😀

muh="blabla_xyz_abc_blubb.mp3"

Jetzt soll "blubb" weg. Problem: Es gibt mehrere Unterstriche im String, wie löse ich das?

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: 5653

Wohnort: Confoederatio Helvetica

#!/bin/sh
string='blabla_xyz_abc_blubb.mp3'
echo ${string%_*}"."${string#*\.}

Unschoen wie Sau, aber tut.
Nun sag bitte nur nicht, dass noch Punkte drin vorkommen duerfen,
dann wird es naemlich langsam muehsam.
(aber immer noch moeglich, man koennte via regexp sagen,
dass er Zeilenende nehmen soll. Oder sonstwie an die Erweiterung kommen)

Fuchs

d1rk

Anmeldungsdatum:
5. April 2006

Beiträge: 2420

ThunderWar hat geschrieben:

muh="blabla_xyz_abc_blubb.mp3"

Jetzt soll "blubb" weg. Problem: Es gibt mehrere Unterstriche im String, wie löse ich das?

Vorausgesetzt, _blubb ist immer an dieser Stelle

echo ${muh} | sed s/"\(.*\)_.*\.mp3"/"\1.mp3"/g


Alternativ kannst du auch einfach mal sagen, was der Zweck der Aktion sein soll. Fürs MP3-Renamen gibt es diverse Tagging-Tools.

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: 5653

Wohnort: Confoederatio Helvetica

Ah, ich Hirsch, es sind ja immer .mp3,
dann haette ich mir den letzten Teil durchaus sparen koennen ☺

${string%_*} ist dann der String bis zu vor dem letzten _,
wenn Du magst kannst Du da noch die Erweiterung anhaengen,
awks NF waere wohl hier intellenter gewesen.

Aber funktionieren tut meins auf jeden Fall, sogar mit nicht-mp3s ☺

Fuchs

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Danke, jetzt klappts! ☺

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Doch noch eine winzige Frage...

Wie bekomme ich das hin, dass Unterstriche durch Leerzeichen ersetzt werden und von jedem Wort der Anfangsbuchstabe groß geschrieben wird?

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: 5653

Wohnort: Confoederatio Helvetica

fuer die Unterstriche: sed mit s/_/" "/ muesste gehen.

Grossbuchstaben: sed 's/\b./\u&/g' (wenn zwischen den Woertern ein Leerzeichen steht)

Fuchs

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Hm, also sed mit s/_/" "/ ersetzt bei mir nur den ersten Unterstrich, der Rest bleibt.

Das mit den Großbuchstaben funktioniert bei mir gar nicht. Kannst dus mir eventuell mal an einem Beispiel zeigen?

Antworten |