|
|
| (26 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 ${<Variable><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")
| + | |
| − | | + | |
| − | ==IP-Validierung==
| + | |
| − | | + | |
| − | function valid_ip()
| + | |
| − | {
| + | |
| − | local ip=$1
| + | |
| − | local stat=1
| + | |
| − |
| + | |
| − | # bash 2:
| + | |
| − | # if ( echo $ip | egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' > /dev/null ) ; then
| + | |
| − | # bash 3:
| + | |
| − | if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
| + | |
| − | OIFS=$IFS
| + | |
| − | IFS='.'
| + | |
| − | ip=($ip)
| + | |
| − | IFS=$OIFS
| + | |
| − | [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
| + | |
| − | stat=$?
| + | |
| − | fi
| + | |
| − | return $stat
| + | |
| − | }
| + | |
| − |
| + | |
| − | if valid_ip $IP; then
| + | |
| − | echo "IP ist eine IPv4-Adresse"
| + | |
| − | fi
| + | |