Uvod:
Kada radite s datotekama u Bashu, možda ćete često trebati odvojiti naziv datoteke od ekstenzije. Uobičajeni pristup koristi naredbu `cut`, ali ova metoda može biti neuspješna s nazivima datoteka koji sadrže više točaka.
Na primjer, naziv datoteke kao što je `a.b.js` bio bi netočno podijeljen na `a` i `b.js` umjesto `a.b` i `js`. Iako Python nudi jednostavno rješenje s `os.path.splitext()`, korištenje Pythona možda nije uvijek najučinkovitija opcija. Ovaj članak istražuje bolje metode za postizanje ovog zadatka u Bashu.
Naredba | Opis |
---|---|
${variable%.*} | Proširenje parametra za uklanjanje ekstenzije iz naziva datoteke. |
${variable##*.} | Proširenje parametra za izdvajanje ekstenzije iz naziva datoteke. |
awk -F. | Postavlja razdjelnik polja na točku, koja se koristi za razdvajanje naziva datoteke. |
OFS="." | Razdjelnik izlaznog polja u awk-u, koristi se za rekonstrukciju naziva datoteke bez ekstenzije. |
NF-- | Smanjuje broj polja za jedno u awk, učinkovito uklanjajući proširenje. |
${BASH_REMATCH} | Niz koji sadrži podudaranja iz regularnog izraza u Bashu. |
local variable | Deklariše varijablu s lokalnim opsegom unutar funkcije u Bashu. |
Detaljna raščlamba Bash rješenja
Pružene skripte nude različite metode za odvajanje naziva datoteke i njegovog proširenja u Bashu. Prva skripta koristi proširenje parametara Bash. Varijabla ${FILE%.*} uklanja proširenje skidanjem svega od posljednje točke do kraja niza, dok ${FILE##*.} hvata produžetak uzimajući sve nakon zadnje menstruacije. Ova metoda je jednostavna i učinkovita za većinu struktura naziva datoteka. Druga skripta koristi awk, snažan alat za obradu teksta u okruženjima sličnim Unixu. Postavljanjem razdjelnika polja na točku pomoću -F., omogućuje dijeljenje naziva datoteke u dijelove. Separator izlaznog polja, OFS=".", i smanjenje broja polja sa NF-- su tehnike za ponovno sastavljanje naziva datoteke bez ekstenzije.
Treća skripta koristi regularne izraze u Bashu, koristeći ${BASH_REMATCH} za snimanje grupa u podudaranju regularnog izraza. Ova skripta koristi obrazac koji dijeli naziv datoteke u dvije grupe: jednu za osnovno ime i jednu za ekstenziju. Konačno, skripta prilagođene funkcije sažima logiku proširenja parametara unutar funkcije, poboljšavajući ponovnu upotrebu i čitljivost koda. Koristi se local variable deklaracije za zadržavanje opsega varijabli unutar funkcije, sprječavajući neželjene nuspojave u većim skriptama. Svaka metoda pokazuje drugačiji pristup rješavanju istog problema, pokazujući svestranost i snagu Bash skriptiranja.
Korištenje proširenja parametara u 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"
Korištenje Awk-a za odvajanje naziva datoteke i ekstenzije
Bash s Awkom
#!/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"
Korištenje regularnih izraza u Bashu
Bash skriptiranje s 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"
Korištenje prilagođene funkcije u Bashu
Bash skriptiranje s prilagođenom funkcijom
#!/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"
Istraživanje alternativnih metoda za manipulaciju datotekama u Bashu
Osim metoda o kojima smo već raspravljali, u Bashu postoje i druge korisne tehnike za manipuliranje nazivima datoteka i ekstenzijama. Jedna takva metoda uključuje korištenje basename i dirname naredbe. basename može se koristiti za izdvajanje naziva datoteke iz staze, dok dirname dohvaća put imenika. Kombiniranje ovih naredbi s proširenjem parametara može učinkovito razdvojiti nazive datoteka i ekstenzije. Na primjer, koristeći basename "$FILE" ".${FILE##*.}" uklanja ekstenziju iz naziva datoteke. Ovaj je pristup posebno koristan kada radite s punim stazama datoteka, a ne samo s nazivima datoteka.
Druga metoda uključuje korištenje sed, snažan uređivač toka za filtriranje i transformiranje teksta. Izradom odgovarajućih regularnih izraza, sed može izolirati naziv datoteke i ekstenziju. Na primjer, naredba echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' dijeli naziv datoteke i ekstenziju, stavljajući ih u zasebne grupe za snimanje. Ova tehnika je fleksibilna i može se nositi sa složenim strukturama naziva datoteka. Istraživanje ovih dodatnih alata i metoda proširuje vašu sposobnost manipuliranja podacima datoteke u Bashu, pružajući robusna rješenja za različite scenarije skriptiranja.
Često postavljana pitanja o manipulaciji datotekama Bash
- Koja je svrha ${FILE%.*} naredba?
- Uklanja ekstenziju iz naziva datoteke uklanjanjem svega nakon zadnje točke.
- Kako se ${FILE##*.} komandni rad?
- Ekstrahira ekstenziju uzimajući sve nakon posljednje točke u nazivu datoteke.
- Što znači awk -F. učiniti u priloženoj skripti?
- Postavlja razdjelnik polja na točku, dopuštajući da se naziv datoteke podijeli na dijelove.
- Zašto koristiti NF-- u an awk scenarij?
- Smanjuje broj polja za jedno, učinkovito uklanjajući ekstenziju iz naziva datoteke.
- Kako regularni izrazi pomažu u izdvajanju naziva datoteke i ekstenzije?
- Omogućuju podudaranje uzoraka i grupiranje, što može izolirati različite dijelove naziva datoteke.
- Koja je korist korištenja prilagođene funkcije u Bashu?
- Prilagođena funkcija poboljšava ponovnu upotrebu koda i čitljivost, čineći skripte modularnijima.
- Kako basename pomoć oko naziva datoteka?
- Izvlači naziv datoteke iz punog puta datoteke, po želji uklanjajući ekstenziju.
- Limenka sed koristiti za manipulaciju imenom datoteke?
- Da, sed može koristiti regularne izraze za transformaciju i izolaciju dijelova naziva datoteka.
Zaključak rješenja za izdvajanje naziva datoteke i ekstenzije
Zaključno, izdvajanje naziva datoteka i ekstenzija u Bashu može se učinkovito postići različitim metodama, od kojih svaka odgovara različitim potrebama i preferencijama. Bilo da koristite proširenje parametara, awk, sed ili prilagođene funkcije, ove tehnike nude fleksibilna i učinkovita rješenja. Razumijevanje i korištenje ovih naredbi osigurava da skripte mogu rukovati nazivima datoteka s više točaka i drugim složenostima bez pogreške.