Kuinka erottaa tiedostonimi ja laajennus Bashissa

Kuinka erottaa tiedostonimi ja laajennus Bashissa
Kuinka erottaa tiedostonimi ja laajennus Bashissa

Esittely:

Kun käsittelet tiedostoja Bashissa, saatat joutua usein erottamaan tiedostonimen sen tunnisteesta. Yleinen lähestymistapa käyttää "cut"-komentoa, mutta tämä menetelmä voi epäonnistua tiedostonimillä, jotka sisältävät useita pisteitä.

Esimerkiksi tiedostonimi, kuten `a.b.js`, jaettaisiin väärin `a` ja `b.js`:iksi `a.b` ja `js`:n sijaan. Vaikka Python tarjoaa helpon ratkaisun "os.path.splitext()":n kanssa, Pythonin käyttö ei välttämättä aina ole tehokkain vaihtoehto. Tässä artikkelissa tarkastellaan parempia menetelmiä tämän tehtävän saavuttamiseksi Bashissa.

Komento Kuvaus
${variable%.*} Parametrin laajennus laajennuksen poistamiseksi tiedostonimestä.
${variable##*.} Parametrin laajennus poimimaan laajennuksen tiedostonimestä.
awk -F. Asettaa kentän erottimeksi pisteen, jota käytetään tiedostonimen jakamiseen.
OFS="." Tulostuskentän erotin awk:ssa, käytetään tiedostonimen rekonstruoimiseen ilman tunnistetta.
NF-- Vähentää kenttien määrää yhdellä awk:ssa ja poistaa tehokkaasti laajennuksen.
${BASH_REMATCH} Taulukko, joka sisältää osumat Bashin säännöllisestä lausekkeesta.
local variable Ilmoittaa muuttujan paikallisella laajuudella funktion sisällä Bashissa.

Bash-ratkaisujen yksityiskohtainen erittely

Toimitetut komentosarjat tarjoavat erilaisia ​​menetelmiä tiedostonimen ja sen laajennuksen erottamiseen Bashissa. Ensimmäinen komentosarja käyttää Bash-parametrien laajennusta. Muuttuja ${FILE%.*} poistaa laajennuksen poistamalla kaiken viimeisestä pisteestä merkkijonon loppuun, while ${FILE##*.} kaappaa laajennuksen ottamalla kaiken viimeisen jakson jälkeen. Tämä menetelmä on yksinkertainen ja tehokas useimmille tiedostonimirakenteille. Toinen skripti käyttää awk, tehokas tekstinkäsittelytyökalu Unix-tyyppisissä ympäristöissä. Asettamalla kentän erottimen pisteeksi käyttämällä -F., se mahdollistaa tiedostonimen jakamisen osiin. Lähtökentän erotin, OFS=".", ja vähentää kenttien määrää NF-- ovat tekniikoita tiedostonimen kokoamiseksi uudelleen ilman sen laajennusta.

Kolmas komentosarja käyttää Bashin säännöllisiä lausekkeita hyödyntäen ${BASH_REMATCH} kaapata ryhmiä säännöllisen lausekkeen ottelussa. Tämä skripti käyttää mallia, joka jakaa tiedostonimen kahteen ryhmään: yksi perusnimelle ja toinen tunnisteelle. Lopuksi mukautetun funktion skripti kapseloi parametrien laajennuslogiikan funktioon, mikä parantaa koodin uudelleenkäytettävyyttä ja luettavuutta. Se käyttää local variable ilmoitukset pitääkseen muuttujat funktion sisällä, mikä estää tahattomat sivuvaikutukset suuremmissa skripteissä. Jokainen menetelmä esittelee erilaisen lähestymistavan saman ongelman ratkaisemiseen, esitellen Bash-skriptien monipuolisuutta ja tehoa.

Parametrilaajennuksen käyttäminen Bashissa

Bash-skripti

#!/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"

Awkin käyttäminen tiedostonimen ja laajennuksen erottamiseen

Bash Awkin kanssa

#!/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"

Säännöllisten lausekkeiden käyttäminen Bashissa

Bash-komentosarja regexillä

#!/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"

Mukautetun funktion käyttäminen Bashissa

Bash-skripti mukautetulla toiminnolla

#!/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"

Vaihtoehtoisten tiedostojen käsittelymenetelmien tutkiminen Bashissa

Jo käsiteltyjen menetelmien lisäksi Bashissa on muita hyödyllisiä tekniikoita tiedostonimien ja laajennuksien käsittelyyn. Yksi tällainen menetelmä sisältää basename ja dirname komentoja. basename voidaan käyttää tiedostonimen purkamiseen polusta, while dirname hakee hakemistopolun. Näiden komentojen yhdistäminen parametrilaajennukseen voi tehokkaasti erottaa tiedostonimet ja laajennukset. Esimerkiksi käyttämällä basename "$FILE" ".${FILE##*.}" poistaa tiedostonimestä laajennuksen. Tämä lähestymistapa on erityisen hyödyllinen käytettäessä täydellisiä tiedostopolkuja pelkkien tiedostonimien sijaan.

Toinen menetelmä sisältää käytön sed, tehokas stream-editori tekstin suodattamiseen ja muuntamiseen. Luomalla sopivia säännöllisiä lausekkeita, sed voi eristää tiedostonimen ja tunnisteen. Esimerkiksi komento echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' jakaa tiedostonimen ja tunnisteen ja sijoittaa ne erillisiin sieppausryhmiin. Tämä tekniikka on joustava ja pystyy käsittelemään monimutkaisia ​​tiedostonimirakenteita. Näiden lisätyökalujen ja -menetelmien tutkiminen laajentaa kykyäsi käsitellä tiedostotietoja Bashissa ja tarjoaa vankkoja ratkaisuja erilaisiin komentosarjaskenaarioihin.

Usein kysyttyjä kysymyksiä Bash-tiedoston manipuloinnista

  1. Mikä on tarkoitus ${FILE%.*} komento?
  2. Se poistaa tiedostonimestä laajennuksen poistamalla kaiken viimeisen pisteen jälkeen.
  3. Kuinka toimii ${FILE##*.} komentotyö?
  4. Se purkaa laajennuksen ottamalla kaiken tiedostonimen viimeisen pisteen jälkeen.
  5. Mikä tekee awk -F. tehdä annetussa skriptissä?
  6. Se asettaa kentän erottimen pisteen, jolloin tiedostonimi voidaan jakaa osiin.
  7. Miksi käyttää NF-- in an awk käsikirjoitus?
  8. Se vähentää kenttien määrää yhdellä ja poistaa tehokkaasti laajennuksen tiedostonimestä.
  9. Kuinka säännölliset lausekkeet auttavat tiedostonimen ja tunnisteen purkamisessa?
  10. Ne mahdollistavat kuvioiden sovituksen ja ryhmittelyn, mikä voi eristää tiedostonimen eri osat.
  11. Mitä hyötyä on mukautetun funktion käyttämisestä Bashissa?
  12. Mukautettu toiminto parantaa koodin uudelleenkäytettävyyttä ja luettavuutta tehden komentosarjoista modulaarisempia.
  13. Kuinka basename apua tiedostonimien kanssa?
  14. Se poimii tiedostonimen täydestä tiedostopolusta ja poistaa valinnaisesti laajennuksen.
  15. Voi sed käytetään tiedostonimien käsittelyyn?
  16. Joo, sed voi käyttää säännöllisiä lausekkeita tiedostonimien osien muuntamiseen ja eristämiseen.

Tiedostonimien ja laajennusten purkamisen ratkaisujen päättäminen

Yhteenvetona voidaan todeta, että tiedostonimien ja laajennusten purkaminen Bashissa voidaan saavuttaa tehokkaasti useilla eri menetelmillä, joista jokainen sopii erilaisiin tarpeisiin ja mieltymyksiin. Nämä tekniikat tarjoavat joustavia ja tehokkaita ratkaisuja, käytettiinpä sitten parametrin laajennus-, awk-, sed- tai mukautettuja toimintoja. Näiden komentojen ymmärtäminen ja hyödyntäminen varmistaa, että komentosarjat voivat käsitellä tiedostonimiä, joissa on useita pisteitä ja muita monimutkaisia ​​virheitä.