Увод:
Када радите са датотекама у Басх-у, можда ћете често морати да одвојите име датотеке од њеног проширења. Уобичајени приступ користи команду `цут`, али овај метод може бити неуспешан са именима датотека која садрже више тачака.
На пример, име датотеке као што је `а.б.јс` било би погрешно подељено на `а` и `б.јс` уместо на `а.б` и `јс`. Иако Питхон пружа једноставно решење са `ос.патх.сплитект()`, коришћење Питхон-а можда није увек најефикаснија опција. Овај чланак истражује боље методе за постизање овог задатка у Басху.
Цомманд | Опис |
---|---|
${variable%.*} | Проширење параметра за уклањање екстензије из назива датотеке. |
${variable##*.} | Проширење параметра за издвајање екстензије из имена датотеке. |
awk -F. | Поставља сепаратор поља на тачку, која се користи за поделу назива датотеке. |
OFS="." | Раздјелник излазног поља у авк-у, који се користи за реконструкцију имена датотеке без екстензије. |
NF-- | Смањује број поља за једно у авк-у, ефикасно уклањајући екстензију. |
${BASH_REMATCH} | Низ који садржи подударања из регуларног израза у Басху. |
local variable | Декларише променљиву са локалним опсегом унутар функције у Басху. |
Детаљан преглед Басх решења
Достављене скрипте нуде различите методе за одвајање имена датотеке и њеног проширења у Басху. Прва скрипта користи проширење Басх параметара. Променљива ${FILE%.*} уклања проширење тако што уклања све од последње тачке до краја низа, док ${FILE##*.} хвата продужетак узимајући све после последњег периода. Овај метод је једноставан и ефикасан за већину структура имена датотека. Друга скрипта користи awk, моћан алат за обраду текста у окружењима сличним Уник-у. Постављањем сепаратора поља на тачку користећи -F., омогућава поделу назива датотеке на делове. сепаратор излазног поља, OFS=".", и смањење броја поља са NF-- су технике за поновно састављање имена датотеке без његовог проширења.
Трећа скрипта користи регуларне изразе у Басх-у, уз помоћ ${BASH_REMATCH} за снимање група у подударању регуларног израза. Ова скрипта користи образац који дели име датотеке у две групе: једну за основно име и једну за екстензију. Коначно, скрипта прилагођене функције инкапсулира логику проширења параметара унутар функције, побољшавајући поновну употребу и читљивост кода. Користи local variable декларације за задржавање променљивих у опсегу унутар функције, спречавајући нежељене нежељене ефекте у већим скриптама. Сваки метод показује другачији приступ решавању истог проблема, показујући свестраност и моћ Басх скриптовања.
Коришћење проширења параметара у Басху
Басх скриптовање
#!/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"
Коришћење Авк-а за одвајање имена датотеке и екстензије
Басх витх Авк
#!/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"
Коришћење регуларних израза у Басху
Басх скриптовање са регуларним изразом
#!/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"
Коришћење прилагођене функције у Басху
Басх скриптовање са прилагођеном функцијом
#!/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"
Истраживање алтернативних метода за манипулацију датотекама у Басху
Поред метода о којима смо већ разговарали, постоје и друге корисне технике у Басху за манипулацију именима датотека и екстензијама. Један такав метод укључује коришћење basename и dirname команде. basename може се користити за издвајање имена датотеке из путање, док dirname преузима путању директоријума. Комбиновање ових команди са проширењем параметара може ефикасно одвојити називе датотека и екстензије. На пример, коришћењем basename "$FILE" ".${FILE##*.}" уклања екстензију из назива датотеке. Овај приступ је посебно користан када радите са пуним путањама датотека, а не само са именима датотека.
Други метод укључује коришћење sed, моћан уређивач стримова за филтрирање и трансформацију текста. Прављењем одговарајућих регуларних израза, sed може да изолује име датотеке и екстензију. На пример, команда echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' дели име датотеке и екстензију, стављајући их у засебне групе за снимање. Ова техника је флексибилна и може да обрађује сложене структуре имена датотека. Истраживање ових додатних алата и метода проширује вашу способност да манипулишете подацима датотека у Басх-у, пружајући робусна решења за различите сценарије скриптовања.
Често постављана питања о манипулацији Басх датотекама
- Која је сврха ${FILE%.*} команда?
- Уклања екстензију из назива датотеке тако што уклања све после последње тачке.
- Како се ${FILE##*.} командни рад?
- Извлачи екстензију узимајући све после последње тачке у имену датотеке.
- Шта ради awk -F. урадите у датој скрипти?
- Поставља сепаратор поља на тачку, омогућавајући да се име датотеке подели на делове.
- Зашто користити NF-- у ан awk скрипта?
- Смањује број поља за једно, ефикасно уклањајући екстензију из назива датотеке.
- Како регуларни изрази помажу у издвајању имена датотеке и екстензије?
- Они омогућавају подударање шаблона и груписање, што може изоловати различите делове имена датотеке.
- Која је предност коришћења прилагођене функције у Басху?
- Прилагођена функција побољшава поновну употребу и читљивост кода, чинећи скрипте модуларнијим.
- Како се basename помоћ са називима датотека?
- Извлачи име датотеке из пуне путање датотеке, опционо уклањајући екстензију.
- Моћи sed користити за манипулацију именом датотеке?
- Да, sed може да користи регуларне изразе да трансформише и изолује делове имена датотека.
Завршавање решења за екстракцију имена датотеке и екстензије
У закључку, издвајање имена датотека и екстензија у Басху може се ефикасно постићи различитим методама, од којих свака одговара различитим потребама и преференцијама. Било да користе проширење параметара, авк, сед или прилагођене функције, ове технике нуде флексибилна и ефикасна решења. Разумевање и коришћење ових команди обезбеђује да скрипте могу да рукују именима датотека са више тачака и другим сложеностима без грешке.