Bash: Manipulanie ciągami znaków cz.1 – obcinanie

Cóż, dopadła mnie potrzeba nauczenia się obcinania ciągów znaków w Bash-u (by dobrze operować nazwami plików i hostów). Tak więc dzisiaj nauczyłem się jak obcinać ciągi znaków od początku jak i od końca w dwa sposoby: do pierwszego wystąpienia wzorca oraz do ostatniego wystąpienia wzorca.

Teoria:
1. Jeżeli chcemy obciąć znaki od początku do pierwszego wystąpienia wzorca skorzystamy z następującej konstrukcji: ${string:#wzrorzec},
2. Jeżeli chcemy obciąć znaki od początku do ostatniego wystąpienia wzorca skorzystamy z następującej konstrukcji: ${string:##wzorzec},
3. Jeżeli chcemy obciąć znaki od końca do pierwszego wystąpienia wzorca skorzystamy z następującej konstrukcji ${string:%wzorzec},
4. Jeżeli chcemy obciąć znaki od końca do ostatniego wystąpienia wzorca skorzystamy z następującej konstrukcji ${string:%%wzorzec},

Przykład – nazwy plików, rozszerzenia i nazwy plików bez rozszerzenia:
Mamy nazwę pliku wraz z ścieżką dostępu:

$ filepath=/tmp/my.dir/filename.tar.gz; echo $filepath
/tmp/my.dir/filename.tar.gz

1. Pobierzmy nazwę katalogu (czyli obcinamy od początku do ostatniego wystąpienia znaku /):

$ dir=${filepath%/*}; echo $dir
/tmp/my.dir

2. Pobierzmy nazwę pliku (czyli obcinamy od początku do ostatniego wystąpienia znaku /):

$ file=${filepath##*/}; echo $file
filename.tar.gz

3. Pobierzmy nazwę pliku bez roszerzenia (czyli z nazwy pliku obcinamy znaki od końca do ostatniego wystąpienia kropki)

$ base=${file%%.*}; echo $base
filename

4. Pobierzmy rozszerzenie pliku (czyli z nazwy pliku obcinamy znaki od początku do do pierwszego wystąpienia kropki)

$ ext=${file#*.}; echo $ext
tar.gz

Dodaj komentarz