Úvod:
Pri práci so súbormi v Bash možno často budete musieť oddeliť názov súboru od jeho prípony. Bežný prístup používa príkaz `cut`, ale táto metóda môže zlyhať pri názvoch súborov, ktoré obsahujú viacero bodiek.
Napríklad názov súboru ako „a.b.js“ by bol nesprávne rozdelený na „a“ a „b.js“ namiesto „a.b“ a „js“. Hoci Python poskytuje jednoduché riešenie s `os.path.splitext()`, použitie Pythonu nemusí byť vždy tou najefektívnejšou možnosťou. Tento článok skúma lepšie metódy na dosiahnutie tejto úlohy v Bash.
Príkaz | Popis |
---|---|
${variable%.*} | Rozšírenie parametrov na odstránenie prípony z názvu súboru. |
${variable##*.} | Rozšírenie parametrov na extrahovanie rozšírenia z názvu súboru. |
awk -F. | Nastaví oddeľovač polí na bodku, ktorá sa používa na rozdelenie názvu súboru. |
OFS="." | Oddeľovač výstupných polí v awk, ktorý sa používa na rekonštrukciu názvu súboru bez prípony. |
NF-- | Znižuje počet polí o jedno v awk, čím účinne odstraňuje rozšírenie. |
${BASH_REMATCH} | Pole, ktoré obsahuje zhody z regulárneho výrazu v Bash. |
local variable | Deklaruje premennú s lokálnym rozsahom v rámci funkcie v Bash. |
Podrobné členenie riešení Bash
Poskytnuté skripty ponúkajú rôzne metódy na oddelenie názvu súboru a jeho prípony v Bash. Prvý skript používa rozšírenie parametrov Bash. Premenná ${FILE%.*} odstráni predĺženie odstránením všetkého od poslednej periódy po koniec reťazca, pričom ${FILE##*.} zachytí predĺženie tým, že vezme všetko po poslednej perióde. Táto metóda je jednoduchá a efektívna pre väčšinu štruktúr súborov. Druhý skript využíva awk, výkonný nástroj na spracovanie textu v prostrediach podobných Unixu. Nastavením oddeľovača polí na bodku pomocou -F., umožňuje rozdeliť názov súboru na časti. separátor výstupného poľa, OFS="."a zníženie počtu polí s NF-- sú techniky na opätovné zostavenie názvu súboru bez jeho prípony.
Tretí skript využíva regulárne výrazy v jazyku Bash ${BASH_REMATCH} zachytiť skupiny v zhode regulárneho výrazu. Tento skript používa vzor, ktorý rozdeľuje názov súboru do dvoch skupín: jedna pre základný názov a druhá pre príponu. Nakoniec skript vlastnej funkcie zapuzdruje logiku rozšírenia parametrov v rámci funkcie, čím zlepšuje opätovnú použiteľnosť a čitateľnosť kódu. Používa sa local variable deklarácie na udržanie rozsahu premenných v rámci funkcie, čím sa zabráni neúmyselným vedľajším účinkom vo väčších skriptoch. Každá metóda demonštruje odlišný prístup k riešeniu toho istého problému a ukazuje všestrannosť a silu skriptovania Bash.
Použitie rozšírenia parametrov v Bash
Bash skriptovanie
#!/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žitie Awk na oddelenie názvu súboru a prí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žívanie regulárnych výrazov v Bash
Bash skriptovanie s regulárnym výrazom
#!/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žívanie vlastnej funkcie v Bash
Bash skriptovanie s vlastnou funkciou
#!/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"
Skúmanie alternatívnych metód na manipuláciu so súbormi v Bash
Okrem už diskutovaných metód existujú v Bash ďalšie užitočné techniky na manipuláciu s názvami súborov a príponami. Jedna z takýchto metód zahŕňa použitie basename a dirname príkazy. basename možno použiť na extrahovanie názvu súboru z cesty, zatiaľ čo dirname získa cestu k adresáru. Kombináciou týchto príkazov s rozšírením parametrov môžete efektívne oddeliť názvy súborov a prípony. Napríklad pomocou basename "$FILE" ".${FILE##*.}" odstráni príponu z názvu súboru. Tento prístup je užitočný najmä pri práci s úplnými cestami k súborom a nie iba s názvami súborov.
Ďalšia metóda zahŕňa použitie sed, výkonný stream editor na filtrovanie a transformáciu textu. Vytvorením vhodných regulárnych výrazov sed dokáže izolovať názov súboru a príponu. Napríklad príkaz echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' rozdelí názov súboru a príponu a umiestni ich do samostatných skupín zachytávania. Táto technika je flexibilná a dokáže zvládnuť zložité štruktúry názvov súborov. Skúmanie týchto dodatočných nástrojov a metód rozširuje vašu schopnosť manipulovať s údajmi súborov v Bash a poskytuje robustné riešenia pre rôzne scenáre skriptovania.
Často kladené otázky o manipulácii so súbormi Bash
- Aký je účel ${FILE%.*} príkaz?
- Odstráni príponu z názvu súboru odstránením všetkého po poslednej bodke.
- Ako sa ${FILE##*.} príkazová práca?
- Extrahuje príponu tak, že vezme všetko po poslednej bodke v názve súboru.
- Čo robí awk -F. urobiť v poskytnutom skripte?
- Nastavuje oddeľovač polí na bodku, čo umožňuje rozdeliť názov súboru na časti.
- Prečo používať NF-- v an awk skript?
- Znižuje počet polí o jedno, čím efektívne odstraňuje príponu z názvu súboru.
- Ako pomáhajú regulárne výrazy pri extrakcii názvu súboru a prípony?
- Umožňujú porovnávanie a zoskupovanie vzorov, ktoré môžu izolovať rôzne časti názvu súboru.
- Aká je výhoda používania vlastnej funkcie v Bash?
- Vlastná funkcia zlepšuje opätovnú použiteľnosť a čitateľnosť kódu, vďaka čomu sú skripty modulárnejšie.
- Ako to robí basename pomôcť s názvami súborov?
- Extrahuje názov súboru z celej cesty k súboru, voliteľne odstráni príponu.
- Môcť sed použiť na manipuláciu s názvom?
- Áno, sed môže použiť regulárne výrazy na transformáciu a izoláciu častí názvov súborov.
Zbalenie riešení pre extrakciu názvu súboru a prípony
Na záver, extrahovanie názvov súborov a rozšírení v Bash možno efektívne dosiahnuť rôznymi metódami, z ktorých každá vyhovuje iným potrebám a preferenciám. Či už používate rozšírenie parametrov, awk, sed alebo vlastné funkcie, tieto techniky ponúkajú flexibilné a efektívne riešenia. Pochopenie a používanie týchto príkazov zaisťuje, že skripty dokážu bez chýb spracovať názvy súborov s viacerými bodkami a inými zložitosťami.