Úvod:
Při práci se soubory v Bash může být často nutné oddělit název souboru od jeho přípony. Běžný přístup používá příkaz `cut`, ale tato metoda může selhat s názvy souborů, které obsahují více teček.
Například název souboru jako „a.b.js“ by byl nesprávně rozdělen na „a“ a „b.js“ namísto „a.b“ a „js“. Ačkoli Python poskytuje snadné řešení s `os.path.splitext()`, použití Pythonu nemusí být vždy tou nejefektivnější možností. Tento článek zkoumá lepší metody pro dosažení tohoto úkolu v Bash.
Příkaz | Popis |
---|---|
${variable%.*} | Rozšíření parametrů pro odstranění přípony z názvu souboru. |
${variable##*.} | Rozšíření parametrů pro extrahování přípony z názvu souboru. |
awk -F. | Nastaví oddělovač polí na tečku, která se používá k rozdělení názvu souboru. |
OFS="." | Výstupní oddělovač polí v awk, který se používá k rekonstrukci názvu souboru bez přípony. |
NF-- | Sníží počet polí o jedno v awk, čímž efektivně odstraní rozšíření. |
${BASH_REMATCH} | Pole, které obsahuje shody z regulárního výrazu v Bash. |
local variable | Deklaruje proměnnou s místním rozsahem v rámci funkce v Bash. |
Detailní rozpis řešení Bash
Poskytnuté skripty nabízejí různé metody pro oddělení názvu souboru a jeho přípony v Bash. První skript používá rozšíření parametrů Bash. Proměnná ${FILE%.*} odstraní rozšíření odstraněním všeho od poslední periody do konce řetězce, zatímco ${FILE##*.} zachytí prodloužení tím, že vezme vše po poslední periodě. Tato metoda je přímočará a efektivní pro většinu struktur názvů souborů. Druhý skript využívá awk, výkonný nástroj pro zpracování textu v prostředích podobných Unixu. Nastavením oddělovače polí na tečku pomocí -F., umožňuje rozdělit název souboru na části. oddělovač výstupního pole, OFS="."a snížení počtu polí pomocí NF-- jsou techniky pro opětovné sestavení názvu souboru bez jeho přípony.
Třetí skript využívá regulární výrazy v Bash ${BASH_REMATCH} k zachycení skupin v regulárním výrazu. Tento skript používá vzor, který rozděluje název souboru do dvou skupin: jedna pro základní název a druhá pro příponu. A konečně skript vlastní funkce zapouzdřuje logiku rozšiřování parametrů do funkce, čímž zlepšuje opětovnou použitelnost a čitelnost kódu. Používá local variable deklarace pro zachování rozsahu proměnných v rámci funkce, čímž se zabrání nechtěným vedlejším efektům ve větších skriptech. Každá metoda demonstruje jiný přístup k řešení stejného problému a ukazuje všestrannost a sílu skriptování Bash.
Použití rozšíření parametrů v Bash
Bash skriptování
#!/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"
Použití Awk k oddělení názvu souboru a přípony
Bash s 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"
Použití regulárních výrazů v Bash
Bash skriptování s regulárním výrazem
#!/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"
Použití uživatelské funkce v Bash
Bash skriptování s vlastní funkcí
#!/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"
Zkoumání alternativních metod pro manipulaci se soubory v Bash
Kromě již diskutovaných metod existují v Bash další užitečné techniky pro manipulaci s názvy souborů a příponami. Jedna taková metoda zahrnuje použití basename a dirname příkazy. basename lze použít k extrahování názvu souboru z cesty, while dirname načte cestu k adresáři. Kombinací těchto příkazů s rozšířením parametrů lze efektivně oddělit názvy souborů a přípony. Například pomocí basename "$FILE" ".${FILE##*.}" odstraní příponu z názvu souboru. Tento přístup je zvláště užitečný při práci s úplnými cestami k souborům, nikoli pouze s názvy souborů.
Další metoda zahrnuje použití sed, výkonný editor streamů pro filtrování a transformaci textu. Vytvořením vhodných regulárních výrazů sed může izolovat název souboru a příponu. Například příkaz echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' rozdělí název souboru a příponu a umístí je do samostatných skupin zachycení. Tato technika je flexibilní a dokáže zpracovat složité struktury souborů. Prozkoumání těchto dalších nástrojů a metod rozšiřuje vaši schopnost manipulovat s daty souborů v Bash a poskytuje robustní řešení pro různé scénáře skriptování.
Často kladené otázky o manipulaci se soubory Bash
- Jaký je účel ${FILE%.*} příkaz?
- Odstraní příponu z názvu souboru odstraněním všeho po poslední tečce.
- Jak se ${FILE##*.} příkazová práce?
- Extrahuje rozšíření tak, že vezme vše za poslední tečkou v názvu souboru.
- Co dělá awk -F. udělat v poskytnutém skriptu?
- Nastaví oddělovač polí na tečku, což umožňuje rozdělení názvu souboru na části.
- Proč používat NF-- v an awk skript?
- Snižuje počet polí o jedno a efektivně odstraňuje příponu z názvu souboru.
- Jak regulární výrazy pomáhají při extrahování názvu souboru a přípony?
- Umožňují porovnávání a seskupování vzorů, které mohou izolovat různé části názvu souboru.
- Jaká je výhoda použití vlastní funkce v Bash?
- Vlastní funkce zlepšuje opětovnou použitelnost a čitelnost kódu, díky čemuž jsou skripty modulárnější.
- Jak to dělá basename pomoc s názvy souborů?
- Extrahuje název souboru z úplné cesty k souboru, volitelně odstraní příponu.
- Umět sed použít pro manipulaci s názvy souborů?
- Ano, sed může používat regulární výrazy k transformaci a izolaci částí názvů souborů.
Zabalení řešení pro extrakci názvu souboru a přípony
Závěrem lze říci, že extrahování názvů souborů a přípon v Bash lze efektivně dosáhnout různými metodami, z nichž každá vyhovuje jiným potřebám a preferencím. Ať už používáte rozšíření parametrů, awk, sed nebo vlastní funkce, tyto techniky nabízejí flexibilní a efektivní řešení. Pochopení a využití těchto příkazů zajišťuje, že skripty dokážou bez chyb zpracovat názvy souborů s více tečkami a dalšími složitostmi.