Search on blog:

Przycinanie nazwy pliku i katalogu w Bash

Bash ma wiele ciekawych możliwości, które pozwalają zrobić wiele rzeczy bez odwoływania się do innych programów.

Przykład działań na tekście np. na ścieżce do pliku

Przykładowa zmienna do prezentacji

$ a=/home/uzytkownik/skrypt.123.py
  • wypisanie zmiennej
$ echo $a
/home/uzytkownik/skrypt.123.py
  • wypisanie zmiennej - alteratywny sposób
$ echo ${a}
/home/uzytkownik/skrypt.123.py

W poniższych nie wykorzystywane są wyrażenia regularne i sama gwiazdka * oznacza dowolny ciąg znaków (o dowolnej długości lub pusty)

% - obcięcie od końca minimalnej ilości

  • obcięcie wszystkiego od końca (%) do pierwszej kropki włącznie (licząc od końca) (.*) czyli sposób na pozbycie się rozszerzenia pliku
$ echo ${a%.*}
/home/uzytkownik/skrypt.123
  • obcięcie wszystkiego od końca (%) do pierwszego slasha włącznie (licząc od końca) (/*) czyli sposób na pozbycie się całej nazwy pliku
$ echo ${a%/*}
/home/uzytkownik

%% - obcięcie od końca maksymalnej ilości

  • obcięcie wszystkiego od końca (%%) do ostatniej kropki włącznie (licząc od końca) (.*) czyli sposób na pozbycie się "podwójnego" rozszerzenia pliku
$ echo ${a%%.*}
/home/uzytkownik/skrypt

# - obcięcie od początku minimalnej ilości

  • obcięcie wszystkiego od początku (#) do pierwszego slasha włącznie (licząc od początku) (*/)
$ echo ${a#*/} 
home/uzytkownik/skrypt.123.py
  • obcięcie wszystkiego od początku (#) do pierwszej kropki włącznie (licząc od początku) (*.) czyli sposób na zostawienie tylko "podwójnego" rozszerzenia pliku
$ echo ${a#*.} 
123.py

## - obcięcie od początku maksymalnej ilości

  • obcięcie wszystkiego od początku (##) do ostatniego slasha włącznie (licząc od początku) (*/) czyli sposób na zostawienie tylko nazwy pliku
$ echo ${a##*/} 
skrypt.123.py
  • obcięcie wszystkiego od początku (#) do ostatniej kropki włącznie (licząc od początku) (*.) czyli sposób na zostawienie tylko rozszerzenia pliku
$ echo ${a##*.} 
py
If you like it
Buy a Coffee