Com separar el nom del fitxer i l'extensió a Bash

Bash

Introducció:

Quan treballeu amb fitxers a Bash, sovint haureu de separar el nom del fitxer de la seva extensió. Un enfocament comú utilitza l'ordre `tallar`, però aquest mètode pot fallar amb noms de fitxer que contenen diversos punts.

Per exemple, un nom de fitxer com "a.b.js" es dividiria incorrectament en "a" i "b.js" en comptes de "a.b" i ​​"js". Tot i que Python proporciona una solució fàcil amb `os.path.splitext()`, l'ús de Python pot no ser sempre l'opció més eficient. Aquest article explora els millors mètodes per aconseguir aquesta tasca a Bash.

Comandament Descripció
${variable%.*} Expansió de paràmetres per eliminar l'extensió d'un nom de fitxer.
${variable##*.} Expansió de paràmetres per extreure l'extensió d'un nom de fitxer.
awk -F. Estableix el separador de camps en un punt, utilitzat per dividir el nom del fitxer.
OFS="." Separador de camps de sortida a awk, utilitzat per reconstruir el nom del fitxer sense extensió.
NF-- Redueix el nombre de camps en un awk, eliminant efectivament l'extensió.
${BASH_REMATCH} Matriu que conté les coincidències d'una expressió regular a Bash.
local variable Declara una variable amb àmbit local dins d'una funció a Bash.

Desglossament detallat de Bash Solutions

Els scripts proporcionats ofereixen diversos mètodes per separar un nom de fitxer i la seva extensió a Bash. El primer script utilitza l'expansió del paràmetre Bash. La variable elimina l'extensió eliminant-ho tot des de l'últim punt fins al final de la cadena, mentre captura l'extensió agafant-ho tot després de l'últim període. Aquest mètode és senzill i eficient per a la majoria d'estructures de noms de fitxer. El segon script utilitza , una potent eina de processament de text en entorns semblants a Unix. Configurant el separador de camps en un punt utilitzant -F., permet dividir el nom del fitxer en parts. El separador de camps de sortida, , i reduint el nombre de camps amb són tècniques per tornar a muntar el nom del fitxer sense la seva extensió.

El tercer script utilitza expressions regulars a Bash, aprofitant per capturar grups en una concordança d'expressió regular. Aquest script utilitza un patró que divideix el nom del fitxer en dos grups: un per al nom base i un altre per a l'extensió. Finalment, l'script de funció personalitzada encapsula la lògica d'expansió de paràmetres dins d'una funció, millorant la reutilització i la llegibilitat del codi. S'utilitza declaracions per mantenir l'abast de les variables dins de la funció, evitant efectes secundaris no desitjats en scripts més grans. Cada mètode demostra un enfocament diferent per resoldre el mateix problema, mostrant la versatilitat i el poder dels scripts de Bash.

Utilitzant l'expansió de paràmetres a Bash

Bash scripting

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

Utilitzant Awk per separar el nom del fitxer i l'extensió

Bash amb 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"

Ús d'expressions regulars a Bash

Bash scripting amb regex

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

Ús d'una funció personalitzada a Bash

Bash scripting amb funció personalitzada

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

Explorant mètodes alternatius per a la manipulació de fitxers a Bash

Més enllà dels mètodes ja comentats, hi ha altres tècniques útils a Bash per manipular noms de fitxers i extensions. Un d'aquests mètodes consisteix a utilitzar el i ordres. es pot utilitzar per extreure el nom del fitxer d'una ruta, mentre dirname recupera la ruta del directori. La combinació d'aquestes ordres amb l'expansió de paràmetres pot separar de manera efectiva els noms de fitxer i les extensions. Per exemple, utilitzant elimina l'extensió del nom del fitxer. Aquest enfocament és especialment útil quan es treballa amb camins de fitxer complets en lloc de només noms de fitxer.

Un altre mètode consisteix a utilitzar , un potent editor de flux per filtrar i transformar text. Mitjançant l'elaboració d'expressions regulars adequades, pot aïllar el nom i l'extensió del fitxer. Per exemple, l'ordre divideix el nom del fitxer i l'extensió, col·locant-los en grups de captura separats. Aquesta tècnica és flexible i pot gestionar estructures complexes de noms de fitxer. L'exploració d'aquestes eines i mètodes addicionals amplia la vostra capacitat de manipular dades de fitxers a Bash, proporcionant solucions sòlides per a diversos escenaris de scripting.

Preguntes freqüents sobre la manipulació de fitxers Bash

  1. Quina és la finalitat del comandament?
  2. Elimina l'extensió del nom del fitxer eliminant-ho tot després de l'últim punt.
  3. Com funciona el treball de comandament?
  4. Extreu l'extensió agafant-ho tot després de l'últim punt del nom del fitxer.
  5. El que fa fer a l'script proporcionat?
  6. Estableix el separador de camps en un punt, la qual cosa permet dividir el nom del fitxer en parts.
  7. Per què utilitzar en un guió?
  8. Redueix el nombre de camps en un, eliminant efectivament l'extensió del nom del fitxer.
  9. Com ajuden les expressions regulars a extreure el nom i l'extensió del fitxer?
  10. Permeten la concordança i l'agrupació de patrons, que poden aïllar diferents parts del nom del fitxer.
  11. Quin és l'avantatge d'utilitzar una funció personalitzada a Bash?
  12. Una funció personalitzada millora la reutilització i la llegibilitat del codi, fent que els scripts siguin més modulars.
  13. Com ajuda amb els noms de fitxer?
  14. Extreu el nom del fitxer d'una ruta completa del fitxer, eliminant opcionalment l'extensió.
  15. Llauna s'utilitzarà per a la manipulació de noms de fitxer?
  16. Sí, pot utilitzar expressions regulars per transformar i aïllar parts dels noms de fitxer.

Conclusió de les solucions per a l'extracció de noms de fitxer i extensions

En conclusió, l'extracció de noms de fitxers i extensions a Bash es pot aconseguir amb eficàcia mitjançant diversos mètodes, cadascun adequat a les diferents necessitats i preferències. Tant si s'utilitzen funcions d'expansió de paràmetres, awk, sed o personalitzades, aquestes tècniques ofereixen solucions flexibles i eficients. Entendre i utilitzar aquestes ordres garanteix que els scripts puguin gestionar noms de fitxers amb diversos períodes i altres complexitats sense errors.