Я никогда не запомню эти загадочные модификаторы команд, поэтому я взял главный ответ и превратил его в функцию в моем ~/.bashrc
файле:
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()
Вот как это выглядит в действии:
$ 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
Файл, о котором идет речь, представляет собой одну непрерывную строку 25 КБ, и безнадежно найти то, что вы ищете, используя обычные grep
.
Обратите внимание на два разных способа вызова cgrep
этого grep
метода параллелей .
Существует «более изящный» способ создания функции, где «2» передается только при установке, что позволяет сохранить 4 строки кода. У меня это не удобно, хотя. Нечто подобное ${parm2} $parm2
. Если я найду его, я пересмотрю функцию и этот ответ.