Zeichenketten bearbeiten
Stringverarbeitung mit der Bash
- Zeichen am Anfang abschneiden
file="DateiName.txt" echo ${file:5}
Ausgabe
Name.txt
- 4 Zeichen ab Position 5 herausschneiden
file="DateiName.txt" echo ${file:5:4}
Ausgabe
Name
cut
Aus einer Zeichenkette Zeichen herausschneiden
Beispiele:
# GID aus /etc/passwd anzeigen zeile=`grep username /etc/passwd` gid=`echo $zeile | cut -d ":" -f "4"`
# Benutzerliste aus LDAP extrahieren: ldapsearch -x -b "ou=users,dc=network" uid -LLL | grep uid: | cut -d " " -f "2" # Homedirectories anzeigen: ldapsearch -x -b "ou=users,dc=network" homeDirectory -LLL | grep homeDirectory: | cut -d " " -f "2"
-d gibt das Trennzeichen an
- Das Standardtrennzeichen ist das Tabulatorzeichen
-f gibt an, das wievielte Feld herauszuschneiden ist.
du
Ermittelt den Speicherplatz von Dateien (Ordnern).
- Absteigen um eine Ebene
du -h -d 1 du -h --max-depth=1 # -h Größe in lesbarem Format ausgeben
- Nur Summe angeben
du -sh du --summarize -h
- Kleine Ordner überspringen
du -h -t 500M du -h --threshold=500M
- Ausgabe sortieren
du -hs | sort -h
here-document
Zur Ausgabe eines mehrzeiligen Textes in einem Skript
if [ $# -eq 0 ]; then cat << 'delimiter' ----------------------------------------------------- Usage: adduser.sh User Gruppe Zuname Vorname Passwort oder adduser.sh Dateiname ----------------------------------------------------- delimiter exit fi
sed
Suchen und Ersetzen von Text
# Jedes Vorkommen des Suchtextes ersetzen cat datei.txt | sed -e s/'suchtext'/'ersatztext'/g > neue_datei.txt # Nur das erste Vorkommen des Suchbegriffs pro Zeile ersetzen cat datei.txt | sed -e s/'suchtext'/'ersatztext'/ > neue_datei.txt
# Nur das 3. Vorkommen des Suchbegriffs pro Zeile ersetzen und das Ergebnis ausgeben cat datei.txt | sed -e s/'suchtext'/'ersatztext'/3p > neue_datei.txt
- Kommentare und Leerzeilen entfernen
sed -e '/^\#/d' datei > datei.tmp sed -e '/^$/d' datei.tmp > datei
- Anführungszeichen löschen
echo "text" | sed 's/"//g'
- Rekursiv suchen und ersetzen von Text
if [ $# -gt 2 ] ; then suchtext=$1 ersatztext=$2 else read -e -p "Suchtext: " suchtext read -e -p "ersetzen durch: " ersatztext fi grep -rl "$suchtext" | \ while read file; do cp "$file" datei.tmp sed -e s/"$suchtext"/"$ersatztext"/g datei.tmp > "$file" done rm datei.tmp
- Ersetzen von Variablen etc. in PHP Dateien
suchtext=\$this-\>someThing ersatztext=\$this-\>someNewThing grep -rl --include "*.php" "$suchtext" | \ while read file; do cp "$file" datei.tmp sed -e s/"$suchtext"/"$ersatztext"/g datei.tmp > "$file" done rm datei.tmp
Man beachte das Quoten der Zeichen $ und >
Dateinamen ändern
suchtext="IMG_ " ersatztext="Bild_" for file in * ; do neu=`echo $file | sed s/"$suchtext"/"$ersatztext"/`;mv "$file" "$neu"; done
- Verzeichnisnamen rekursiv ändern
read -e -p "Suchtext: " suchText read -e -p "ersetzen durch: " ersatzText find . -type d | \ while read dir; do newDir=`echo "$dir" | sed -e s/"$suchText"/"$ersatzText"/`; if [ $dir != $newDir ] ; then mv "$dir" "$newDir" ; fi done
sort
- Passwortdatei sortieren nach UID
sort -t: -k 3n /etc/passwd
- Doppelpunkt als Trennzeichen für Spalten: Option -t
- Sortieren numerisch nach der 3. Spalte
Verbrauchten Festplattenplatz ausgeben und Liste sortieren:
# Es wird numerisch nach der 3. Spalte sortiert (0, 1, 2) repquota -a | sort -n +2
ergibt:
hs -- 654052 0 0 8068 0 0 eifr -- 710531 0 0 4710 0 0 vs -- 1721870 0 0 5303 0 0 vsdir -- 2077308 0 0 5795 0 0 root -- 10953439 0 0 3767 0 0
tr
- Dateinamen ändern mit
tr
Zum Beispiel Großbuchstaben in Kleinbuchstaben
for file in * do new=`echo $file | tr '[:upper:]' '[:lower:]'` # new=`echo $file | tr '11.3' '11.4'` echo mv $file $new done
Mit find auch rekursiv
find . -type f | while read i; do file="${i##*/}"; directory="${i%/*}"; mv "$i" "$directory"/"`echo "$file" | tr "A-Z" "a-z"`" ; done