Introduksjon:
Når du arbeider med filer i Bash, kan det hende du ofte må skille filnavnet fra filtypen. En vanlig tilnærming bruker "cut"-kommandoen, men denne metoden kan mislykkes med filnavn som inneholder flere punktum.
For eksempel vil et filnavn som `a.b.js` være feil delt inn i `a` og `b.js` i stedet for `a.b` og `js`. Selv om Python gir en enkel løsning med `os.path.splitext()`, er det kanskje ikke alltid det mest effektive alternativet å bruke Python. Denne artikkelen utforsker bedre metoder for å oppnå denne oppgaven i Bash.
Kommando | Beskrivelse |
---|---|
${variable%.*} | Parameterutvidelse for å fjerne utvidelsen fra et filnavn. |
${variable##*.} | Parameterutvidelse for å trekke ut utvidelsen fra et filnavn. |
awk -F. | Setter feltskilleren til et punktum som brukes til å dele filnavnet. |
OFS="." | Utdatafeltseparator i awk, brukt til å rekonstruere filnavnet uten utvidelse. |
NF-- | Reduserer antall felt med ett i awk, og fjerner effektivt utvidelsen. |
${BASH_REMATCH} | Array som inneholder treffene fra et regulært uttrykk i Bash. |
local variable | Erklærer en variabel med lokalt omfang innenfor en funksjon i Bash. |
Detaljert oversikt over Bash-løsninger
Skriptene som tilbys tilbyr ulike metoder for å skille et filnavn og dets utvidelse i Bash. Det første skriptet bruker Bash-parameterutvidelse. Variabelen ${FILE%.*} fjerner forlengelsen ved å strippe alt fra siste periode til slutten av strengen, mens ${FILE##*.} fanger opp forlengelsen ved å ta alt etter siste periode. Denne metoden er enkel og effektiv for de fleste filnavnstrukturer. Det andre skriptet bruker awk, et kraftig tekstbehandlingsverktøy i Unix-lignende miljøer. Ved å sette feltskilleren til en periode ved hjelp av -F., tillater det å dele filnavnet i deler. Utdatafeltseparatoren, OFS=".", og redusere antall felt med NF-- er teknikker for å sette sammen filnavnet på nytt uten utvidelse.
Det tredje skriptet bruker regulære uttrykk i Bash, utnytter ${BASH_REMATCH} for å fange grupper i en regex-match. Dette skriptet bruker et mønster som deler filnavnet i to grupper: en for basisnavnet og en for utvidelsen. Til slutt innkapsler det tilpassede funksjonsskriptet parameterutvidelseslogikken i en funksjon, og forbedrer kodens gjenbrukbarhet og lesbarhet. Det bruker local variable erklæringer for å holde variabler innenfor funksjonen, og forhindre utilsiktede bivirkninger i større skript. Hver metode viser en annen tilnærming til å løse det samme problemet, og viser allsidigheten og kraften til Bash-skripting.
Bruke parameterutvidelse i Bash
Bash-skripting
#!/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"
Bruke Awk for å skille filnavn og utvidelse
Bash med 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"
Bruke regulære uttrykk i Bash
Bash-skripting med regex
#!/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"
Bruke en egendefinert funksjon i Bash
Bash-skripting med tilpasset funksjon
#!/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"
Utforsker alternative metoder for filmanipulering i Bash
Utover metodene som allerede er diskutert, er det andre nyttige teknikker i Bash for å manipulere filnavn og utvidelser. En slik metode innebærer å bruke basename og dirname kommandoer. basename kan brukes til å trekke ut filnavnet fra en bane, while dirname henter katalogbanen. Å kombinere disse kommandoene med parameterutvidelse kan effektivt skille filnavn og utvidelser. For eksempel å bruke basename "$FILE" ".${FILE##*.}" fjerner utvidelsen fra filnavnet. Denne tilnærmingen er spesielt nyttig når du arbeider med fullstendige filbaner i stedet for bare filnavn.
En annen metode innebærer å bruke 1. 3, en kraftig strømredigerer for filtrering og transformering av tekst. Ved å lage passende regulære uttrykk, 1. 3 kan isolere filnavnet og filtypen. For eksempel kommandoen echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' deler filnavnet og filtypen, og plasserer dem i separate fangstgrupper. Denne teknikken er fleksibel og kan håndtere komplekse filnavnstrukturer. Utforsking av disse tilleggsverktøyene og metodene utvider din evne til å manipulere fildata i Bash, og gir robuste løsninger for ulike skriptscenarier.
Ofte stilte spørsmål om Bash-filmanipulering
- Hva er hensikten med ${FILE%.*} kommando?
- Den fjerner utvidelsen fra filnavnet ved å fjerne alt etter siste punktum.
- Hvordan fungerer ${FILE##*.} kommandoarbeid?
- Den trekker ut utvidelsen ved å ta alt etter siste punktum i filnavnet.
- Hva gjør awk -F. gjøre i det medfølgende skriptet?
- Den setter feltseparatoren til en periode, slik at filnavnet kan deles opp i deler.
- Hvorfor bruke NF-- i en awk manus?
- Det reduserer antall felt med ett, og fjerner effektivt utvidelsen fra filnavnet.
- Hvordan hjelper regulære uttrykk med å trekke ut filnavn og filtype?
- De tillater mønstertilpasning og gruppering, som kan isolere forskjellige deler av filnavnet.
- Hva er fordelen med å bruke en tilpasset funksjon i Bash?
- En tilpasset funksjon forbedrer kodegjenbrukbarhet og lesbarhet, og gjør skript mer modulære.
- Hvordan gjør basename hjelp med filnavn?
- Den trekker ut filnavnet fra en fullstendig filbane, eventuelt fjerner utvidelsen.
- Kan 1. 3 brukes til filnavnmanipulering?
- Ja, 1. 3 kan bruke regulære uttrykk for å transformere og isolere deler av filnavn.
Avslutte løsningene for utvinning av filnavn og utvidelse
Avslutningsvis kan utpakking av filnavn og utvidelser i Bash oppnås effektivt gjennom ulike metoder, hver tilpasset ulike behov og preferanser. Enten du bruker parameterutvidelse, awk, sed eller tilpassede funksjoner, tilbyr disse teknikkene fleksible og effektive løsninger. Å forstå og bruke disse kommandoene sikrer at skript kan håndtere filnavn med flere punktum og annen kompleksitet uten feil.