Nigdy nie zapamiętam tych tajemniczych modyfikatorów poleceń, więc wybrałem najlepszą odpowiedź i przekształciłem ją w funkcję w moim ~/.bashrc
pliku:
cgrep() {
# For files that are arrays 10's of thousands of characters print.
# Use cpgrep to print 30 characters before and after search patttern.
if [ $# -eq 2 ] ; then
# Format was 'cgrep "search string" /path/to/filename'
grep -o -P ".{0,30}$1.{0,30}" "$2"
else
# Format was 'cat /path/to/filename | cgrep "search string"
grep -o -P ".{0,30}$1.{0,30}"
fi
} # cgrep()
Oto jak to wygląda w akcji:
$ ll /tmp/rick/scp.Mf7UdS/Mf7UdS.Source
-rw-r--r-- 1 rick rick 25780 Jul 3 19:05 /tmp/rick/scp.Mf7UdS/Mf7UdS.Source
$ cat /tmp/rick/scp.Mf7UdS/Mf7UdS.Source | cgrep "Link to iconic"
1:43:30.3540244000 /mnt/e/bin/Link to iconic S -rwxrwxrwx 777 rick 1000 ri
$ cgrep "Link to iconic" /tmp/rick/scp.Mf7UdS/Mf7UdS.Source
1:43:30.3540244000 /mnt/e/bin/Link to iconic S -rwxrwxrwx 777 rick 1000 ri
Plik, o którym mowa, to jedna ciągła linia 25K i beznadziejne jest znalezienie tego, czego szukasz, używając zwykłego grep
.
Zwróć uwagę na dwa różne sposoby wywołania cgrep
tej grep
metody paraleli .
Istnieje „ładniejszy” sposób tworzenia funkcji, w której „$ 2” jest przekazywane tylko wtedy, gdy jest ustawiona, co oszczędziłoby 4 wiersze kodu. Nie mam go jednak pod ręką. Coś jak ${parm2} $parm2
. Jeśli ją znajdę, zrewiduję funkcję i tę odpowiedź.