Я ніколи не легко запам’ятаю ці критичні модифікатори команд, тому я взяв верхню відповідь і перетворив її на функцію у моєму ~/.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
.
Існує "niftier" спосіб створення функції, коли "$ 2" передається лише тоді, коли встановлено, що дозволить зберегти 4 рядки коду. Я не маю це корисно, хоча. Щось подібне ${parm2} $parm2
. Якщо я знайду, я перегляну функцію та цю відповідь.