Kako razdvojiti naziv datoteke i ekstenziju u Bashu

Kako razdvojiti naziv datoteke i ekstenziju u Bashu
Kako razdvojiti naziv datoteke i ekstenziju u Bashu

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

  1. Koja je svrha ${FILE%.*} naredba?
  2. Uklanja ekstenziju iz naziva datoteke uklanjanjem svega nakon zadnje točke.
  3. Kako se ${FILE##*.} komandni rad?
  4. Ekstrahira ekstenziju uzimajući sve nakon posljednje točke u nazivu datoteke.
  5. Što znači awk -F. učiniti u priloženoj skripti?
  6. Postavlja razdjelnik polja na točku, dopuštajući da se naziv datoteke podijeli na dijelove.
  7. Zašto koristiti NF-- u an awk scenarij?
  8. Smanjuje broj polja za jedno, učinkovito uklanjajući ekstenziju iz naziva datoteke.
  9. Kako regularni izrazi pomažu u izdvajanju naziva datoteke i ekstenzije?
  10. Omogućuju podudaranje uzoraka i grupiranje, što može izolirati različite dijelove naziva datoteke.
  11. Koja je korist korištenja prilagođene funkcije u Bashu?
  12. Prilagođena funkcija poboljšava ponovnu upotrebu koda i čitljivost, čineći skripte modularnijima.
  13. Kako basename pomoć oko naziva datoteka?
  14. Izvlači naziv datoteke iz punog puta datoteke, po želji uklanjajući ekstenziju.
  15. Limenka sed koristiti za manipulaciju imenom datoteke?
  16. 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.