Jak oddělit název souboru a příponu v Bash

Jak oddělit název souboru a příponu v Bash
Jak oddělit název souboru a příponu v Bash

Ú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

  1. Jaký je účel ${FILE%.*} příkaz?
  2. Odstraní příponu z názvu souboru odstraněním všeho po poslední tečce.
  3. Jak se ${FILE##*.} příkazová práce?
  4. Extrahuje rozšíření tak, že vezme vše za poslední tečkou v názvu souboru.
  5. Co dělá awk -F. udělat v poskytnutém skriptu?
  6. Nastaví oddělovač polí na tečku, což umožňuje rozdělení názvu souboru na části.
  7. Proč používat NF-- v an awk skript?
  8. Snižuje počet polí o jedno a efektivně odstraňuje příponu z názvu souboru.
  9. Jak regulární výrazy pomáhají při extrahování názvu souboru a přípony?
  10. Umožňují porovnávání a seskupování vzorů, které mohou izolovat různé části názvu souboru.
  11. Jaká je výhoda použití vlastní funkce v Bash?
  12. Vlastní funkce zlepšuje opětovnou použitelnost a čitelnost kódu, díky čemuž jsou skripty modulárnější.
  13. Jak to dělá basename pomoc s názvy souborů?
  14. Extrahuje název souboru z úplné cesty k souboru, volitelně odstraní příponu.
  15. Umět sed použít pro manipulaci s názvy souborů?
  16. 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.