Hogyan lehet elválasztani a fájlnevet és a kiterjesztést a Bash-ban

Hogyan lehet elválasztani a fájlnevet és a kiterjesztést a Bash-ban
Hogyan lehet elválasztani a fájlnevet és a kiterjesztést a Bash-ban

Bevezetés:

Amikor fájlokkal dolgozik a Bashban, gyakran el kell különítenie a fájlnevet a kiterjesztésétől. Egy általános megközelítés a `cut` parancsot használja, de ez a módszer meghiúsulhat több pontot tartalmazó fájlneveknél.

Például egy olyan fájlnév, mint az „a.b.js”, helytelenül oszlik fel „a” és „b.js” részre az „a.b” és „js” helyett. Bár a Python egyszerű megoldást kínál az `os.path.splitext()` paraméterrel, a Python használata nem mindig a leghatékonyabb megoldás. Ez a cikk jobb módszereket vizsgál meg ennek a feladatnak a Bashban való megvalósítására.

Parancs Leírás
${variable%.*} Paraméterbővítés a kiterjesztés eltávolításához a fájlnévből.
${variable##*.} Paraméterbővítés a kiterjesztés fájlnévből való kibontásához.
awk -F. A mezőelválasztót egy pontra állítja, amely a fájlnév felosztására szolgál.
OFS="." Kimeneti mező elválasztó az awk-ban, a fájlnév kiterjesztés nélküli rekonstruálására szolgál.
NF-- Eggyel csökkenti a mezők számát az awk-ban, hatékonyan eltávolítva a kiterjesztést.
${BASH_REMATCH} Tömb, amely tartalmazza a Bash reguláris kifejezéseinek egyezéseit.
local variable A Bash függvényében egy helyi hatókörű változót deklarál.

A Bash megoldások részletes lebontása

A mellékelt szkriptek különféle módszereket kínálnak a fájlnév és kiterjesztés elválasztására a Bashban. Az első szkript Bash paraméterbővítést használ. A változó ${FILE%.*} eltávolítja a kiterjesztést úgy, hogy az utolsó ponttól a karakterlánc végéig mindent lecsupaszít, míg ${FILE##*.} úgy rögzíti a hosszabbítást, hogy mindent az utolsó időszak után vesz. Ez a módszer egyszerű és hatékony a legtöbb fájlnév-struktúra esetében. A második szkript használja awk, egy hatékony szövegfeldolgozó eszköz Unix-szerű környezetekben. Ha a mezőelválasztót egy pontra állítja a segítségével -F., lehetővé teszi a fájlnév részekre bontását. A kimeneti mező elválasztó, OFS=".", és a mezők számának csökkentése -val NF-- technikák a fájlnév kiterjesztése nélkül történő újraösszeállítására.

A harmadik szkript reguláris kifejezéseket használ Bashban, kihasználva ${BASH_REMATCH} csoportok rögzítésére egy regex egyezésben. Ez a szkript olyan mintát használ, amely a fájlnevet két csoportra osztja: egy az alapnévre, egy pedig a kiterjesztésre. Végül az egyéni függvényszkript a paraméterbővítési logikát egy függvényen belül tartalmazza, javítva a kód újrafelhasználhatóságát és olvashatóságát. Használja local variable deklarációk, hogy a változók hatókörét a függvényen belül tartsák, megelőzve a nem kívánt mellékhatásokat a nagyobb szkriptekben. Mindegyik módszer más-más megközelítést mutat be ugyanazon probléma megoldásában, bemutatva a Bash szkriptelés sokoldalúságát és erejét.

Paraméterbővítés használata a Bashban

Bash szkriptelés

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

Az awk használata a fájlnév és a kiterjesztés elkülönítésére

Bash az Awkkal

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

Reguláris kifejezések használata Bashban

Bash szkriptelés reguláris kifejezéssel

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

Egyéni függvény használata a Bashban

Bash szkriptelés egyéni funkcióval

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

Fájlkezelés alternatív módszereinek felfedezése a Bash-ban

A már tárgyalt módszereken túlmenően a Bash más hasznos technikákat is tartalmaz a fájlnevek és a kiterjesztések manipulálására. Az egyik ilyen módszer a basename és dirname parancsokat. basename használható a fájlnév elérési útból való kinyerésére, míg dirname lekéri a könyvtár elérési útját. Ezeknek a parancsoknak a paraméterbővítéssel történő kombinálása hatékonyan elválaszthatja a fájlneveket és a kiterjesztéseket. Például a használatával basename "$FILE" ".${FILE##*.}" eltávolítja a kiterjesztést a fájlnévből. Ez a megközelítés különösen akkor hasznos, ha teljes fájlelérési utakkal dolgozik, nem csupán fájlnevekkel.

Egy másik módszer magában foglalja a használatát sed, egy hatékony adatfolyam-szerkesztő szöveg szűrésére és átalakítására. Megfelelő reguláris kifejezések létrehozásával, sed el tudja különíteni a fájlnevet és a kiterjesztést. Például a parancs echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' felosztja a fájlnevet és a kiterjesztést, külön rögzítési csoportokba helyezve őket. Ez a technika rugalmas és bonyolult fájlnév-struktúrákat is képes kezelni. Ezeknek a további eszközöknek és módszereknek a felfedezése kibővíti a fájladatok kezelésének lehetőségét a Bashban, és robusztus megoldásokat kínál különféle szkriptelési forgatókönyvekhez.

Gyakran Ismételt Kérdések a Bash-fájlok kezelésével kapcsolatban

  1. Mi a célja a ${FILE%.*} parancs?
  2. Eltávolítja a kiterjesztést a fájlnévből úgy, hogy az utolsó pont után mindent lehúz.
  3. Hogyan működik a ${FILE##*.} parancsi munka?
  4. Kibontja a kiterjesztést úgy, hogy mindent a fájlnév utolsó pontja után vesz.
  5. Mit csinál awk -F. csináld a megadott scriptben?
  6. A mezőelválasztót pontra állítja, lehetővé téve a fájlnév részekre bontását.
  7. Miért használja NF-- egy an awk forgatókönyv?
  8. Eggyel csökkenti a mezők számát, hatékonyan eltávolítva a kiterjesztést a fájlnévből.
  9. Hogyan segítenek a reguláris kifejezések a fájlnév és kiterjesztés kibontásában?
  10. Lehetővé teszik a mintaillesztést és a csoportosítást, amely elkülönítheti a fájlnév különböző részeit.
  11. Milyen előnyökkel jár az egyéni függvény használata a Bashban?
  12. Egy egyedi funkció javítja a kód újrafelhasználhatóságát és olvashatóságát, modulárisabbá téve a szkripteket.
  13. Hogyan működik basename segít a fájlnevekben?
  14. Kibontja a fájlnevet a teljes fájl elérési útjából, és adott esetben eltávolítja a kiterjesztést.
  15. Tud sed fájlnév-manipulációra használható?
  16. Igen, sed reguláris kifejezéseket használhat a fájlnevek részeinek átalakítására és elkülönítésére.

A fájlnév- és kiterjesztés-kivonat megoldásainak összefoglalása

Összefoglalva, a fájlnevek és kiterjesztések kibontása a Bash-ban hatékonyan megvalósítható különféle módszerekkel, amelyek mindegyike más-más igényeknek és preferenciáknak felel meg. Függetlenül attól, hogy paraméterbővítést, awk-t, sed-et vagy egyéni függvényeket használnak, ezek a technikák rugalmas és hatékony megoldásokat kínálnak. Ezeknek a parancsoknak a megértése és használata biztosítja, hogy a szkriptek hiba nélkül kezelni tudják a több ponttal rendelkező fájlneveket és egyéb bonyolultságokat.