grep

grep binary file

Written by  on Oktober 5, 2018
Binary file (standard input) matches
-a | --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

grep -v

Written by  on Oktober 29, 2015

Wie sucht man ob ein Prozess läuft?

# ps aux | grep smb
root       699  0.0  0.4  28800  4036 ?        Ss   Oct22   0:43 smbd -F
root       768  0.0  0.1  28800  1604 ?        S    Oct22   0:04 smbd -F
root     21411  0.0  0.0   4680   772 pts/0    S+   18:06   0:00 grep --color=auto smb

Das ist zuviel Output, weil auch der grep-Prozess selber angezeigt wird. Dafür gibt es eine einfältige Lösung:

# ps aux | grep smb | grep -v grep
root       699  0.0  0.4  28800  4036 ?        Ss   Oct22   0:43 smbd -F
root       768  0.0  0.1  28800  1604 ?        S    Oct22   0:05 smbd -F

Aber wie geht es besser?

ps aux | grep [s]mb
root       699  0.0  0.4  28800  4036 ?        Ss   Oct22   0:43 smbd -F
root       768  0.0  0.1  28800  1604 ?        S    Oct22   0:05 smbd -F

Warum funktioniert das? Ganz einfach, weil in der Prozessliste jetzt der String „smb“ nicht mehr vorkommt beim grep-Befehl, sondern der String „[s]mb“. Gesucht wird von dem Befehl aber trotzdem nach „smb“.
Braucht man nur die PID vom Prozess geht es aber einfacher:

# pgrep smb
699
768

Soll das ganze nur zum Beenden der Prozesse genutzt werden, braucht man gar keinen grep mehr.

# killall smbd

Grep Dingsda

Written by  on Juni 23, 2015

Aufgabe: Beschreiben Sie Grep wie bei Dingsda… ohne das Wort Grep zu benutzen

Lösung: Microsoft Windows Powershell

Änderungen am grep Befehl

Written by  on Januar 24, 2015
Ich bin kürzlich über ein Script gestolpert, dass sich nach der Umstellung von Ubuntu 12.04 auf Ubuntu 14.04 plötzlich ganz anders verhalten hat.
Sinngemäß sah der Abschnitt so aus:
echo test | grep -ir test
Was vielleicht auffällt, ist das der -r Parameter hier unnötig ist. Bisher wurde das einfach ignoriert. Aber seit einiger Zeit ist das anders, der -r  Parameter gilt jetzt auch so wie angegeben, wenn gar kein Pfad angegeben wurde. Es wird einfach rekursiv alles vom aktuellen Verzeichnis aus durchsucht.
Verhalten Alte Version:
# echo test | grep -ir test
test
Verhalten Neue Version:
> echo test | grep -ir test
.bashrc: test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
Was ist also passiert? Und vorallem wann?
Ein Blick in das Changelog zeigt, dass das schon länger geändert wurde, aber halt erst langsam in den Distributionen angekommen ist:
* Noteworthy changes in release 2.11 (2012-03-02) [stable]
...
** New features

 If no file operand is given, and a command-line -r or equivalent
 option is given, grep now searches the working directory. Formerly
 grep ignored the -r and searched standard input nonrecursively.
 An -r found in GREP_OPTIONS does not have this new effect.
...

Useless Use of Cat Award

Written by  on September 20, 2008

Mitlerweile bin ich ja über mehrere Hinweise gestoßen, dass es manche Menschen einfach nicht vertragen eine *sinnlose* cat Anweisung in einem Shellscript zu sehen. Der ganze Hintergrund der Geschichte wird ja z.B. hier http://partmaps.org/era/unix/award.html zusammengefasst.

Ich denke aber, dass auch ein Konstrukt wie "cat /var/log/messages | grep <Asudruck>" durchaus seine Berechtigung hat. Will ich etwa das Logfile von gestern sehen wird daraus deutlich einfacher ein "zcat /var/log/messages | grep <Asudruck>" oder "bzcat /var/log/messages | grep <Asudruck>" auf der nächsten Maschine daraus. Und das kann wohl der grep alleine noch nicht…

Das Wort des Tages – Part 3

Written by  on Februar 23, 2008

Das Wort des Tages sollte grundsätzlich öfter kommen, aber ich komm halt nicht dazu:

Die Invertierung von Alles ist Nichts!

Hier der Beweis für diese Aussage:

Liefert den kompletten Inhalt der Datei:

grep &quot;&quot; &lt;dateiname&gt;

Liefert nix mehr, da die Suche invertiert wird:

grep -v &quot;&quot; &lt;dateiname&gt;

Die Mächtigkeit der Unix Toolbox

Written by  on Dezember 1, 2007

Auf der Suche nach einer Möglichkeit die Formate in einer Musiksammlung etwas zu vereinheitlichen, habe ich mir die folgende schöne Zeile zusammengeschustert:

file * | grep &quot; MPEG ADTS, layer II, v1&quot; | cut -d&quot;:&quot; -f1 | xargs -i -d&quot;n&quot; lame --resample 44.1 --mp2input  {}

file findet den Dateitypen für mich raus
grep sucht mir alle MPEG2 Files unabhängig von der Dateierweiterung
cut schneidet wider nur den aktuellen Dateinamen raus
xargs ruft mir den lame mit den entsprechenden optionen auf, damit diese Dateien auch überall abgespielt werden