Entfernen Sie die Dateierweiterung mit Bash
-
Verwenden Sie die
cut
-Methode, um die Dateierweiterung in Bash zu entfernen - Probleme beim Entfernen der Dateierweiterung in Bash
-
Entfernen Sie die Dateierweiterung mit dem Befehl
basename
in Bash
In diesem Tutorial wird die Methode zum Ausschneiden und Anzeigen bestimmter Felder einer Datei mit dem Bash-Skript über die Bash-Befehle cut
und basename
erläutert. Wir werden auch seine Verwendung in Verbindung mit Rohren sehen. Dann werden wir einige Probleme sehen, die möglicherweise auftreten können, wenn Erweiterungen aus den Dateinamen entfernt werden.
Wir werden uns auch mehrere anschauliche Beispiele ansehen, wie man die Dateierweiterungen eines Dateinamens kürzt und nur die Stammversion dieses Dateinamens anzeigt.
Verwenden Sie die cut
-Methode, um die Dateierweiterung in Bash zu entfernen
Die Methode cut
wird verwendet, um bestimmte Abschnitte einer Datei aus jeder Zeile herauszuschneiden. Dieser Befehl nimmt einen Dateinamen und eine Option (obligatorisch) als Argumente und gibt die Ergebnisse auf der Standardkonsole aus. Wir können damit auch Dateinamenerweiterungen entfernen. Zu diesem Zweck wird die Option -f
zusammen mit dem Dateinamen verwendet. Nachfolgend finden Sie eine kurze Beschreibung einiger der verfügbaren Optionen.
-b
(Bytes): Diese Option schneidet Textteile aus allen Zeilen nach einer bestimmten Anzahl von Bytes ab.-c
(Spalte): Wird verwendet, um bestimmte Spalten oder Spaltenbereiche aus der Datei auszuschneiden und den Rest auf der Konsole anzuzeigen.-f
(Feld): Eine Sammlung von Symbolen zwischen zwei begrenzenden Symbolen (mit Ausnahme des ersten) wird als Feld bezeichnet. Für jede Zeile in der Datei zeigt-f
nur Felder oder Teile der erwähnten Zeile mit ganzzahligen Feldnummern an. Dertab
wird standardmäßig als Trennzeichen betrachtet. Wir können jedoch das Flag-d
verwenden, um ein beliebiges benutzerdefiniertes Trennzeichen zu definieren. Die Zusammenfassung für den Befehlcut
mit den Optionen-f
undd
ist wie folgt.
$ cut -f (comma separated field numbers) -d "delimiting symbol" filename.txt
Es sind auch andere Optionen wie -complement
, -output-delimiter
und -version
verfügbar. Sie können Hilfe mit cut --help
erhalten, um weitere Informationen zu erhalten.
Beispiel 1: Entfernen von Erweiterungen aus Inhalt
Sehen Sie sich das folgende Beispiel an, um mehr über -f
und -d
zu erfahren. Angenommen, webpages.txt enthält die Namen verschiedener HTML-Webseiten für eine bestimmte Website, jede in einer neuen Zeile. Schauen wir uns den Inhalt von webpages.txt an, indem wir den Befehl cat
auf dem Terminal ausführen: -
$ cat webpages.txt
index.html
contact_us.html
login.html
dashboard.html
Das folgende Bash-Skript schneidet Erweiterungen von allen Dateinamen in der webpages.txt ab und zeigt die Ausgabe auf der Standardkonsole an. Angenommen, wir haben eine Shell-Skriptdatei mit dem Namen script erstellt und den folgenden Code darin geschrieben:
#!/bin/sh
#script file
file=webpages.txt
cut -f 1 -d '.' $file
Hier wird 1
vor -f
verwendet, um nur das erste Feld zu behalten, und .
in -d
-Optionen gibt an, dass Felder mit .
getrennt werden sollen. Symbol. Daher behält das Skript den gesamten Text in jeder Zeile von webpages.txt vor dem ersten .
begegnen. Schauen wir uns die Ausgabe an.
Ausgabe:
index
contact_us
login
dashboard
Wenn wir hier die Feldnummer auf 2
setzen, soll für jede Zeile nur ein zweites Feld (also HTML) auf dem Bildschirm ausgegeben werden.
Beispiel 2: Entfernen der Erweiterung von einem Dateinamen, der in einer Variablen gespeichert ist, mit Pipe und Anzeigen auf der Konsole
Angenommen, Sie möchten die Erweiterung von einem Dateinamen entfernen, der in einer Variablen gespeichert ist. Das folgende Stück Code wird das tun: -
file=webpages.txt
echo "$file" | cut -f 1 -d '.'
Ausgabe:
webpages
Der obige Code leitet den Dateinamen, der in der Variablen file
gespeichert ist, an den cut-Befehl weiter, der nur das erste Feld des Textes behält.
Beispiel 3: Entfernen der Erweiterung von einem Dateinamen, der in einer Variablen gespeichert ist, mithilfe von Pipe und Zuweisen zu einer anderen Variablen
file=webpages.txt
trimmed=$(echo "$filename" | cut -f 1 -d '.')
echo "$trimmed"
Ausgabe
webpages
Der obige Code verwendet die Befehlsersetzungsmethode zum Ersetzen der Ausgabe des Befehls an der Stelle des Befehls. Daher wird immer getrimmt
zugewiesen, egal welche rechte Seite der Zuordnungsausgänge vorhanden ist.
Probleme beim Entfernen der Dateierweiterung in Bash
Wenn ein Dateiname das Trennzeichen selbst im Dateinamen enthält, gibt die obige Formulierung nur Text vor dem ersten Auftreten des Trennzeichens zurück. Wir können dieses Problem lösen, indem wir den Namen umgekehrt kürzen.
Schauen wir uns den folgenden Code an.
file=abcd.efg.hmtl
trimmed=$(echo "$filename" | cut -f 2- -d '.')
echo "$trimmed"
Ausgabe:
abcd
Im obigen Codeabschnitt hat die Variable file
einen weiteren Punkt im zugewiesenen Wert. Die Ausgabe enthält den gesamten Text im ersten Feld, das bei der Begegnung mit dem ersten Punkt endet.
Lösung: Wir können den Inhalt von file
umkehren, bevor wir ihn an den cut
-Befehl weiterleiten. Danach behält der Befehl Ausschneiden
alle Felder bis auf das erste aus dem umgekehrten Text bei. Jetzt muss es wieder umgekehrt werden, um die endgültige Antwort zu erhalten.
file=abcd.efg.html
trimmed=$(echo "$file" | rev | cut -f 2- -d '.' | rev)
echo "$trimmed"
Ausgabe:
abcd.efg.html
Bitte beachten Sie die Änderung des Werts der f
-Optionen. Die Option -f 2-
wird verwendet, um alle Felder mit einem Positionswert von zwei oder mehr beizubehalten.
Entfernen Sie die Dateierweiterung mit dem Befehl basename
in Bash
Wenn Sie den Namen der Erweiterung kennen, können Sie mit dem Befehl basename
die Erweiterung aus dem Dateinamen entfernen.
file=abcd.abc.html
trimmed=$(basename $file .html)
echo "$trimmed"
Ausgabe
abcd.abc
Das erste Befehlszeilenargument des Befehls Basisname
ist der Name der Variablen, und der Erweiterungsname ist das zweite Argument. Der Befehl basename
durchsucht den Text und gibt alles aus, bevor der Erweiterungsname (in unserem Fall .html
) zum ersten Mal auftaucht.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn