Bash: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „=Entfernen eines Präfixes= * Syntax: ${name#muster} oder ${name##muster} * Wird am Anfang des Variablenwertes das Muster erkannt, wird dieses abgeschnitten. *…“) |
|||
Zeile 50: | Zeile 50: | ||
* Hinweis: expr gibt zusätzlich die Länge des gefundenen Ausdrucks aus, also nach /dev/null umleiten, wenn nicht gewünscht | * Hinweis: expr gibt zusätzlich die Länge des gefundenen Ausdrucks aus, also nach /dev/null umleiten, wenn nicht gewünscht | ||
<source lang="bash"> | <source lang="bash"> | ||
X="ab2" | |||
if expr $X : "[a-z][a-z0-9]* > /dev/null ; then | if expr $X : "[a-z][a-z0-9]* > /dev/null ; then | ||
echo "X ist ein Identifier" | echo "X ist ein Identifier" |
Version vom 14. März 2021, 08:39 Uhr
Entfernen eines Präfixes
- Syntax: ${name#muster} oder ${name##muster}
- Wird am Anfang des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
- Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
- Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
X=Datei.01.txt ; echo "#:" ${X#*.} "##:" ${X##*.}
#: 01.txt ##: txt
Entfernen eines Suffixes
- Syntax: ${name%muster} oder ${name%%muster}
- Wird am Ende des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
- Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
- Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
X=Datei.01.txt ; echo "%:" ${X%.*} "%%:" ${X%%.*}
%: Datei.01 %%: Datei
Ersetzen eines Teilstrings
- Syntax: ${name/muster/ersetzung}
- Wird das Muster im Variablenwert gefunden, wird es einmal ersetzt.
- Sollen alle Teilstrings ersetzt werden gilt die Syntax:
- ${name//muster/ersetzung}
- Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
- '\' ist ESC-Zeichen: das folgende Zeichen wird nicht als Metazeichen interpretiert
X=Datei.01.txt ; echo ${X/Datei./artikel_}
UNIX_PATH=/abc/def ; WIN_PATH=${UNIX_PATH//\//\\} ; echo $WIN_PATH
artikel_01.txt \abc\def
Suchen eines regulären Ausdrucks
- Syntax: expr $name : <regex>
- expr liefert als Ergebnis 0, wenn der Ausdruck gefunden wurde, 1 wenn nicht.
- Hinweis: der reg. Ausdruck bezieht sich immer auf den Stringanfang, enthält also implizit einen "^".
- folgende Syntaxelemente habe ich gefunden:
- beliebig oft: "a*"
- maximal einmal: "a\?"
- mindestens einmal: "a\+"
- Anzahl Vorkommen "a\{1,5\}"
- Klammerung "\(T:)\?[0-9-]*"
- Alternativen: "affe\|gnu"
- Hinweis: expr gibt zusätzlich die Länge des gefundenen Ausdrucks aus, also nach /dev/null umleiten, wenn nicht gewünscht
X="ab2"
if expr $X : "[a-z][a-z0-9]* > /dev/null ; then
echo "X ist ein Identifier"
fi
Datei zeilenweise abarbeiten
function Example(){
local lines
local file=/tmp/dummy
mapfile -t <$file lines
local count=${#lines[@]}
local ix=0
while [ $ix -lt $count ]; do
local line=${lines[$ix]}
ix=$(expr $ix + 1)
done
}