Entfernen Sie die Dateierweiterung mit Bash

Muhammad Husnain 24 März 2022
  1. Verwenden Sie die cut-Methode, um die Dateierweiterung in Bash zu entfernen
  2. Probleme beim Entfernen der Dateierweiterung in Bash
  3. Entfernen Sie die Dateierweiterung mit dem Befehl basename in Bash
Entfernen Sie die Dateierweiterung mit 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. Der tab 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 Befehl cut mit den Optionen -f und d 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.

Muhammad Husnain avatar Muhammad Husnain avatar

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

Verwandter Artikel - Bash File