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