Скрыть часть совпадения из вывода grep

Нет ответа. Тогда я нажал на Uninstall в TeamViewer 10. И появилось следующее: enter image description here

Как указано, этот пункт меню не связан ни с каким пакетом. Итак, после подтверждения, что я хочу удалить его из меню в любом случае, пункт меню исчез. Проблема решена.

4
28.02.2017, 11:47
5 ответов

Самый простой способ - разрешить tr удалить их:

$ grep -oE "\[[0-9].+\]" logfile | tr -d '[]'
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c

Обратите внимание, что tr Утилита не знает о регулярных выражениях или шаблонах точно так же, как оболочка. В этом случае операнд [] - это всего лишь два символа [ и ] .

1
27.01.2020, 20:48

Вместо использования grep с расширенным регулярным выражением ( -E ) используйте grep для perl-regex ( -P ) с просмотром назад и вперед.

$ grep -oP "(?<=\[)[0-9].+(?=\])" logfile
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c

Здесь (? <= \ [) указывает, что должен быть предшествующий \ [], а (? = \]) указывает, что там должен быть следующим за \] , но не включать их в вывод соответствия.

7
27.01.2020, 20:48
$ cat a.txt
test hello..[113a6d9e-7b06-42c6-a52b-7a4e4d2e216c]... this is
te [113a6d9e-7b06-42c6-a52b-7a4e4d2e216c].  this  is hello

$ grep -oP '(?<=\[)[^\]]*' a.txt
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c
113a6d9e-7b06-42c6-a52b-7a4e4d2e216c

https://stackoverflow.com/a/19242713/6947646

2
27.01.2020, 20:48

Один из способов - подключение к разрезу :

grep -oE "\[[0-9].+\]" logfile | cut -d'[' -f2 | cut -d']' -f1
1
27.01.2020, 20:48

sed более применим для данного случая, чем grep

sed '/\n/{P;D;};s/\[/\n/;s/\]/\n/;D' log
2
27.01.2020, 20:48

Теги

Похожие вопросы