suffix abschneiden
suffix abschneiden
Hab ja einige docs über Stringverarbeitung hier, aber steh auf dem Schlauch.
Ich möchte den Dateisuffix eines Dateinames abschneiden.
file.txt => file
file.pdf.old.inc.wq.texxxd.org => file.pdf.old.inc.wq.texxxd
Es gibt mehrere Punkte im Dateinamen und die Länge des suffix ist nicht bekannt.
Ich möchte den Dateisuffix eines Dateinames abschneiden.
file.txt => file
file.pdf.old.inc.wq.texxxd.org => file.pdf.old.inc.wq.texxxd
Es gibt mehrere Punkte im Dateinamen und die Länge des suffix ist nicht bekannt.
Re: suffix abschneiden
In perl mit. Falls das unuebersichtlich aussieht und Erklaerung bedarf einfach fragen.MoonKid hat geschrieben: Ich möchte den Dateisuffix eines Dateinames abschneiden.
file.txt => file
file.pdf.old.inc.wq.texxxd.org => file.pdf.old.inc.wq.texxxd
Es gibt mehrere Punkte im Dateinamen und die Länge des suffix ist nicht bekannt.
Code: Alles auswählen
perl -e '@a=qw(file.txt file.pdf.old.inc.wq.texxxd.org); for (@a){$_=~s/\.[^.]*$//;print "$_\n"}'
file
file.pdf.old.inc.wq.texxxd
Re: suffix abschneiden
Mit der Bash:
Code: Alles auswählen
$ a="Datei.Name.html.wri"
$ b=${a%.*}
$ echo $b
Datei.Name.html
Re: suffix abschneiden
Hui! Wofuer steht %?ThorstenS hat geschrieben:Mit der Bash:Code: Alles auswählen
$ a="Datei.Name.html.wri" $ b=${a%.*} $ echo $b Datei.Name.html
Re: suffix abschneiden
Ich poste dir mal meinen bashSubstitution Wikieintrag dazu:
Code: Alles auswählen
Tabelle aus dem LM 02/10
Zeichen: Bedeutung: Beispiel:
# Einfaches Löschen von vorne x="aabc": das führende a entfernen ${x#a}
## Gieriges Löschen von vorne x="aabc": alle führenden as entfernen ${x##a}
% Einfaches Löschen von hinten x="abcc": das letzte c entfernen ${x%c}
%% Gieriges Löschen von hinten x="abcc": alle c von hinten entfernen ${x%%c}
/ Ändern eines Textes beim 1. Vorkommen x="abcabc": ${x/b/x} erzeugt axcabc
// Ändern eines Textes alle Vorkommen x="abcabc": ${x//b/x} erzeugt axcaxc
^ bash4: 1. Zeichen in Großbuchstaben x="abc": ${x^a} erzeugt Abc ${x^} wandelt immer den 1. Buchstaben um
^^ bash4: alle Zeichen in Großbuchstaben analog zu ^
, bash4: 1. Zeichen in Kleinbuchstaben analog zu ^
,, bash4: alle Zeichen in Kleinbuchstaben analog zu ^
pwd in der bash: MYDIR=${0%/*}
Alle Pfade in $PATH Zeile für Zeile ausgeben: printf ${PATH//:/\\n}
Präfix-Ersetzung:
1) ${VARIABLE%Zeichen}Ersatz - wenn $VARIABLE mit 'Zeichen' endet, lösche dieses und ersetze mit 'Ersatz' (String), wenn vorhanden (wenn weggelassen wird nur gelöscht; gilt für alle Varianten)
2) ${VARIABLE%Zeichen*}Ersatz - lösche alles ab (einschl.) dem letzten Vorkommen von 'Zeichen', ersetze mit 'Ersatz' (s.o.)
3) ${VARIABLE%%Zeichen*}Ersatz - lösche alles ab (einschl.) dem 1. Vorkommen von 'Zeichen', ersetze mit 'Ersatz' (s.o.)
Beispiel:
Alles im aktuellen Verzeichnis, was mit '*.html' endet, soll in '*.htm' umbenannt werden:
ls -1A *.html | while read arg ; do mv $arg ${arg%.html}.htm ; done
Suffix-Ersetzung:
1) ${VARIABLE#Zeichen} - wenn $VARIABLE mit 'Zeichen' beginnt, lösche dieses
2) ${VARIABLE#*Zeichen} - lösche alles bis zum 1. Vorkommen von 'Zeichen' (einschl. 'Zeichen'!)
3) ${VARIABLE##*Zeichen} - lösche alles bis zum letzten Vorkommen von 'Zeichen' (einschl. 'Zeichen'!)
Beispiele:
echo $HOME # Ausgabe: /home/user
echo ${HOME#/} # Ausgabe: home/user
echo ${HOME##*/} # Ausgabe: user
echo ${HOME#*e} # Ausgabe: /user
echo ${HOME##*e} # Ausgabe: r
echo ${HOME#e} # Ausgabe: /home/user
BDAY="21.05.1984"
echo ${BDAY//./} # Ausgabe 21051984 - eliminiert alle Punkte!
echo ${BDAY:0:2} # 21 - also den Tag
echo ${BDAY:3:2} # 05 - also den Monat
echo ${BDAY:6:4} # 1984 - also das Jahr
http://www.tldp.org/LDP/abs/html/refcards.html#AEN18911
Table B-5. String Operations
adr="thorsten-nachname.post@thorstennachname.de"
local="${adr%%@*}"
domain="${adr#*@}"
echo -e "local-part: ${local}\ndomain-part: ${domain}"
Ergibt:
local-part: thorsten-nachname.post
domain-part: thorstennachname.de
Jedes Bild von _MG_3423.JPG nach IMG_3423.JPG umbenennen:
for i in _*; do mv $i IMG_${i##*_}; done
Jedes TIFF Bild auf 25% verkleinern und als jpg abspeichern:
for i in ../*tiff; do bild=$(basename $i);bild=${bild%%.*};convert $i -quality 75 -resize 25% $bild.jpg; echo $i; done
Präfix-Ersetzung:
1) ${VARIABLE%Zeichen}Ersatz - wenn $VARIABLE mit 'Zeichen' endet, lösche dieses und ersetze mit 'Ersatz' (String), wenn vorhanden (wenn weggelassen wird nur gelöscht; gilt für alle Varianten)
2) ${VARIABLE%Zeichen*}Ersatz - lösche alles ab (einschl.) dem letzten Vorkommen von 'Zeichen', ersetze mit 'Ersatz' (s.o.)
3) ${VARIABLE%%Zeichen*}Ersatz - lösche alles ab (einschl.) dem 1. Vorkommen von 'Zeichen', ersetze mit 'Ersatz' (s.o.)
Beispiel:
Alles im aktuellen Verzeichnis, was mit '*.html' endet, soll in '*.htm' umbenannt werden:
ls -1A *.html | while read arg ; do mv $arg ${arg%.html}.htm ; done
Suffix-Ersetzung:
1) ${VARIABLE#Zeichen} - wenn $VARIABLE mit 'Zeichen' beginnt, lösche dieses
2) ${VARIABLE#*Zeichen} - lösche alles bis zum 1. Vorkommen von 'Zeichen' (einschl. 'Zeichen'!)
3) ${VARIABLE##*Zeichen} - lösche alles bis zum letzten Vorkommen von 'Zeichen' (einschl. 'Zeichen'!)
Beispiele:
echo $HOME # Ausgabe: /home/user
echo ${HOME#/} # Ausgabe: home/user
echo ${HOME##*/} # Ausgabe: user
echo ${HOME#*e} # Ausgabe: /user
echo ${HOME##*e} # Ausgabe: r
echo ${HOME#e} # Ausgabe: /home/user
Re: suffix abschneiden
Danke. Das kann sich eines Tages wirklich noch als nuetzlich erweisen. Und ab jetzt erinnere ich mich auch daran.ThorstenS hat geschrieben:Ich poste dir mal meinen bashSubstitution Wikieintrag dazu:
Re: suffix abschneiden
freut mich, wenns dir mal hilft
Re: suffix abschneiden
Zur Portabilitaet: Dieses Prefix und Postfix Abschneiden ist nicht nur in der bash moeglich. Schon die ksh unterstuetzt es. Inzwischen ist es auch in POSIX. Allerdings gibt es aeltere Shells die damit nichts anfangen koennen.
Use ed once in a while!