Ako oddeliť názov súboru a príponu v Bash

Ako oddeliť názov súboru a príponu v Bash
Ako oddeliť názov súboru a príponu v Bash

Ú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

  1. Aký je účel ${FILE%.*} príkaz?
  2. Odstráni príponu z názvu súboru odstránením všetkého po poslednej bodke.
  3. Ako sa ${FILE##*.} príkazová práca?
  4. Extrahuje príponu tak, že vezme všetko po poslednej bodke v názve súboru.
  5. Čo robí awk -F. urobiť v poskytnutom skripte?
  6. Nastavuje oddeľovač polí na bodku, čo umožňuje rozdeliť názov súboru na časti.
  7. Prečo používať NF-- v an awk skript?
  8. Znižuje počet polí o jedno, čím efektívne odstraňuje príponu z názvu súboru.
  9. Ako pomáhajú regulárne výrazy pri extrakcii názvu súboru a prípony?
  10. Umožňujú porovnávanie a zoskupovanie vzorov, ktoré môžu izolovať rôzne časti názvu súboru.
  11. Aká je výhoda používania vlastnej funkcie v Bash?
  12. Vlastná funkcia zlepšuje opätovnú použiteľnosť a čitateľnosť kódu, vďaka čomu sú skripty modulárnejšie.
  13. Ako to robí basename pomôcť s názvami súborov?
  14. Extrahuje názov súboru z celej cesty k súboru, voliteľne odstráni príponu.
  15. Môcť sed použiť na manipuláciu s názvom?
  16. Á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.