Kako ločiti ime datoteke in pripono v Bashu

Kako ločiti ime datoteke in pripono v Bashu
Kako ločiti ime datoteke in pripono v Bashu

Uvod:

Ko delate z datotekami v Bashu, boste morda morali pogosto ločiti ime datoteke od njene končnice. Običajen pristop uporablja ukaz `cut`, vendar ta metoda lahko odpove pri imenih datotek, ki vsebujejo več pik.

Na primer, ime datoteke, kot je `a.b.js`, bi bilo nepravilno razdeljeno na `a` in `b.js` namesto `a.b` in `js``. Čeprav Python ponuja preprosto rešitev z `os.path.splitext()`, uporaba Pythona morda ni vedno najučinkovitejša možnost. Ta članek raziskuje boljše metode za doseganje te naloge v Bashu.

Ukaz Opis
${variable%.*} Razširitev parametra za odstranitev pripone iz imena datoteke.
${variable##*.} Razširitev parametra za ekstrahiranje pripone iz imena datoteke.
awk -F. Nastavi ločilo polja na piko, ki se uporablja za razdelitev imena datoteke.
OFS="." Ločilo izhodnega polja v awk, ki se uporablja za rekonstrukcijo imena datoteke brez končnice.
NF-- Zmanjša število polj za eno v awk, s čimer učinkovito odstrani razširitev.
${BASH_REMATCH} Matrika, ki vsebuje ujemanja iz regularnega izraza v Bashu.
local variable Označi spremenljivko z lokalnim obsegom znotraj funkcije v Bashu.

Podrobna razčlenitev rešitev Bash

Priloženi skripti ponujajo različne metode za ločevanje imena datoteke in njene pripone v Bashu. Prvi skript uporablja razširitev parametrov Bash. Spremenljivka ${FILE%.*} odstrani razširitev tako, da odstrani vse od zadnje pike do konca niza, medtem ko ${FILE##*.} zajame podaljšanje tako, da vzame vse po zadnji menstruaciji. Ta metoda je preprosta in učinkovita za večino struktur imen datotek. Drugi skript uporablja awk, zmogljivo orodje za obdelavo besedila v okoljih, podobnih Unixu. Z nastavitvijo ločila polja na piko z uporabo -F., omogoča razdelitev imena datoteke na dele. ločilo izhodnega polja, OFS="."in zmanjšanje števila polj z NF-- so tehnike za ponovno sestavljanje imena datoteke brez končnice.

Tretji skript uporablja regularne izraze v Bashu, ki izkoriščajo ${BASH_REMATCH} za zajemanje skupin v ujemanju regularnega izraza. Ta skript uporablja vzorec, ki razdeli ime datoteke v dve skupini: eno za osnovno ime in eno za končnico. Nazadnje, skript funkcije po meri zajema logiko razširitve parametrov znotraj funkcije, s čimer izboljša možnost ponovne uporabe in berljivosti kode. Uporablja se local variable deklaracije za ohranjanje obsega spremenljivk znotraj funkcije, kar preprečuje nenamerne stranske učinke v večjih skriptih. Vsaka metoda prikazuje drugačen pristop k reševanju istega problema ter prikazuje vsestranskost in moč skriptiranja Bash.

Uporaba razširitve parametrov v Bashu

Bash skriptiranje

#!/bin/bash
# Script to extract filename and extension using parameter expansion
FILE="a.b.js"
FILENAME="${FILE%.*}"
EXTENSION="${FILE##*.}"
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"

Uporaba programa Awk za ločevanje imena datoteke in pripone

Bash z Awk

#!/bin/bash
# Script to extract filename and extension using awk
FILE="a.b.js"
FILENAME=$(echo "$FILE" | awk -F. '{OFS="."; NF--; print $0}')
EXTENSION=$(echo "$FILE" | awk -F. '{print $NF}')
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"

Uporaba regularnih izrazov v Bashu

Bash skriptiranje z regularnim izrazom

#!/bin/bash
# Script to extract filename and extension using regex
FILE="a.b.js"
[[ "$FILE" =~ (.*)\.(.*) ]]
FILENAME=${BASH_REMATCH[1]}
EXTENSION=${BASH_REMATCH[2]}
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"

Uporaba funkcije po meri v Bashu

Bash skript s funkcijo po meri

#!/bin/bash
# Function to extract filename and extension
extract_filename_extension() {
  local file="$1"
  echo "Filename: ${file%.*}"
  echo "Extension: ${file##*.}"
}
# Call the function with a file
extract_filename_extension "a.b.js"

Raziskovanje alternativnih metod za manipulacijo datotek v Bashu

Poleg že obravnavanih metod obstajajo v Bashu še druge uporabne tehnike za manipulacijo imen datotek in končnic. Ena taka metoda vključuje uporabo basename in dirname ukazi. basename lahko uporabite za ekstrahiranje imena datoteke iz poti, medtem ko dirname pridobi pot imenika. Kombinacija teh ukazov z razširitvijo parametrov lahko učinkovito loči imena datotek in končnice. Na primer, z uporabo basename "$FILE" ".${FILE##*.}" odstrani končnico iz imena datoteke. Ta pristop je še posebej uporaben pri delu s polnimi potmi datotek in ne le z imeni datotek.

Druga metoda vključuje uporabo sed, zmogljiv urejevalnik tokov za filtriranje in preoblikovanje besedila. Z oblikovanjem ustreznih regularnih izrazov, sed lahko izolira ime datoteke in končnico. Na primer ukaz echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' razdeli ime datoteke in končnico ter ju postavi v ločene skupine za zajemanje. Ta tehnika je prilagodljiva in lahko obravnava zapletene strukture imen datotek. Raziskovanje teh dodatnih orodij in metod razširi vašo zmožnost manipuliranja s podatki datoteke v Bashu, kar zagotavlja robustne rešitve za različne scenarije skriptiranja.

Pogosto zastavljena vprašanja o manipulaciji datotek Bash

  1. Kakšen je namen ${FILE%.*} ukaz?
  2. Odstrani pripono iz imena datoteke tako, da odstrani vse za zadnjo piko.
  3. Kako deluje ${FILE##*.} komandno delo?
  4. Pripono ekstrahira tako, da vzame vse za zadnjo piko v imenu datoteke.
  5. Kaj počne awk -F. narediti v priloženem skriptu?
  6. Nastavi ločilo polja na piko, kar omogoča razdelitev imena datoteke na dele.
  7. Zakaj uporabljati NF-- v an awk scenarij?
  8. Zmanjša število polj za eno, s čimer učinkovito odstrani končnico iz imena datoteke.
  9. Kako regularni izrazi pomagajo pri pridobivanju imena datoteke in pripone?
  10. Omogočajo ujemanje vzorcev in združevanje, kar lahko izolira različne dele imena datoteke.
  11. Kakšne so prednosti uporabe funkcije po meri v Bashu?
  12. Funkcija po meri izboljša ponovno uporabnost in berljivost kode, zaradi česar so skripti bolj modularni.
  13. Kako basename pomoč pri imenih datotek?
  14. Izvleče ime datoteke iz celotne poti datoteke, po želji odstrani končnico.
  15. Lahko sed uporabiti za manipulacijo imen datotek?
  16. ja sed lahko uporablja regularne izraze za pretvorbo in izolacijo delov imen datotek.

Zaključek rešitev za ekstrakcijo imen datotek in razširitev

Skratka, ekstrahiranje imen datotek in končnic v Bashu je mogoče učinkovito doseči z različnimi metodami, od katerih je vsaka primerna za različne potrebe in želje. Ne glede na to, ali uporabljate razširitev parametrov, awk, sed ali funkcije po meri, te tehnike ponujajo prilagodljive in učinkovite rešitve. Razumevanje in uporaba teh ukazov zagotavlja, da lahko skripti brez napak obravnavajo imena datotek z več pikami in druge zapletenosti.