|
|
(30 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | ==(Viele) Zeilen modifizieren, in denen ein Suchmuster (regex) vorhanden ist.==
| + | [[Category:Programmierung]] |
− | sed -e '/regex/command' eingabedatei > ausgabedatei<br /><br />
| + | |
− | Bsp.: Alle Zeilen Löschen, in denen "ABC" am Anfang der Zeile steht.:
| + | |
− | sed -e '/^ABC/d' eingabedatei.txt > ausgabedatei.txt
| + | |
− | ''Vorsicht:'' ist die Eingabedatei gleich der Ausgabedatei, dann wird die Ausgabedatei am Ende leer sein. :-(
| + | |
| | | |
− | ==Bash Bashing==
| + | Zum Thema '''BASH''' finden sich folgende Artikel: |
− | | + | * [[(Viele) Zeilen modifizieren, in denen ein Suchmuster (regex) vorhanden ist.]] |
− | Unlesbare Bash-Skripte, unnötige externe Programmaufrufe und überlange Befehlsketten sind vermeidbar.
| + | * [[Bash Bashing]] |
− | Interessante Beiträge aus der gleichnamigen Beitragsserie des Linux-Magazins und weitere Anregungen folgen hier in Kurzform.
| + | * [[dump-Backupskript]] |
− | | + | * [[Datei einer bestimmten Größe mit zufälligem Inhalt erstellen]] |
− | ===cut, sed, grep & Co. vermeiden===
| + | * [[Zufälligen String mit einer definierten Länge erzeugen]] |
− | | + | |
− | Quelle: Folge 5, Linux-Magazin 02/10
| + | |
− | | + | |
− | ====Parameter-Expansion====
| + | |
− | | + | |
− | Nach dem Schema ${<Var><Zeichen><Suchmuster>} erledigt die Bash viele Aufgaben selbst, die sonst mit cut, sed, grep oder awk gelöst werden.
| + | |
− | Als Zeichen # % / ^ , zulässig, die doppelte Angabe schaltet jeweils in den gierigen Modus und ersetzt alles bis zum letzten Vorkommen des Suchmusters.
| + | |
− | | + | |
− | {|border="1"
| + | |
− | ! Zeichen
| + | |
− | ! Bedeutung
| + | |
− | ! Beispiel
| + | |
− | |-
| + | |
− | | #
| + | |
− | | Löschen von links
| + | |
− | | X="aabcabcc"; ${X#a}; löscht das erste a
| + | |
− | |-
| + | |
− | | ##
| + | |
− | | Löschen von links
| + | |
− | | X="aabcabcc"; ${X##a}; löscht alle führenden a (funktioniert in Bash 3.2 nicht, wo ist der Fehler?)
| + | |
− | |-
| + | |
− | | %
| + | |
− | | Löschen von rechts
| + | |
− | | X="aabcabcc"; ${X%c}; löscht das letzte c
| + | |
− | |-
| + | |
− | | %%
| + | |
− | | Löschen von rechts
| + | |
− | | X="aabcabcc"; ${X%c}; löscht alle c am Ende (funktioniert in Bash 3.2 nicht, wo ist der Fehler?)
| + | |
− | |-
| + | |
− | | /
| + | |
− | | Ersetzen (substitude)
| + | |
− | | X="aabcabcc"; ${X/b/d}; ersetzt 1. b durch d
| + | |
− | |-
| + | |
− | | /
| + | |
− | | Ersetzen (substitude)
| + | |
− | | X="aabcabcc"; ${X/b}; löscht 1. b
| + | |
− | |-
| + | |
− | | //
| + | |
− | | Ersetzen (substitude)
| + | |
− | | X="aabcabcc"; ${X//b/d}; ersetzt alle b durch d
| + | |
− | |-
| + | |
− | | //
| + | |
− | | Ersetzen (substitude)
| + | |
− | | X="aabcabcc"; ${X//b}; löscht alle b
| + | |
− | |-
| + | |
− | !
| + | |
− | ! funktioniert erst ab Bash 4
| + | |
− | !
| + | |
− | |-
| + | |
− | | ^
| + | |
− | | Umwandeln in Großbuchstaben (uppercase)
| + | |
− | | X="aabcabcc"; ${X^a}; wandelt erstes a in A
| + | |
− | |-
| + | |
− | | ^^
| + | |
− | | Umwandeln in Großbuchstaben (uppercase)
| + | |
− | | X="aabcabcc"; ${X^^bc}; wandelt alle bc in BC
| + | |
− | |-
| + | |
− | | ^^
| + | |
− | | Umwandeln in Großbuchstaben (uppercase)
| + | |
− | | X="aabcabcc"; ${X^^}; wandelt alles in Grossbuchstaben
| + | |
− | |-
| + | |
− | | ,
| + | |
− | | Umwandeln in Kleinbuchstaben (lowercase)
| + | |
− | | X="AABCABCC"; ${X,A}; wandelt erstes A in a
| + | |
− | |-
| + | |
− | | ,,
| + | |
− | | Umwandeln in Kleinbuchstaben (lowercase)
| + | |
− | | X="AABCABCC"; ${X,,BC}; wandelt alle BC in bc
| + | |
− | |-
| + | |
− | | ,,
| + | |
− | | Umwandeln in Kleinbuchstaben (lowercase)
| + | |
− | | X="AABCABCC"; ${X,,}; wandelt alles in Kleinbuchstaben
| + | |
− | |}
| + | |
− | | + | |
− | praktische Beispiele:
| + | |
− | VERZEICHNIS="${0%/*}"
| + | |
− | löscht alles bis zum ersten / von rechts
| + | |
− | ersetzt:
| + | |
− | VERZEICHNIS=$(dirname "$0")
| + | |
− |
| + | |
− | SKRIPTNAME="${0##*/}"
| + | |
− | löscht alles bis zum letzten / von links
| + | |
− | ersetzt:
| + | |
− | SKRIPTNAME=$(basename "$0")
| + | |