LINUX.ORG.RU

egrep is obsolescent; using grep -E

 ,


0

2

Это уведомление поломало мне скрипт. Я ценю заботу создателей о лучшем выборе для меня, но их забота выходит мне боком и вызывает только раздражение необходимостью искать новые решения.

СИТУАЦИЯ:

find /../dirname -type f -not -regex ".*\.\(JPG\|jpg\|jpeg\|gif\|pdf\|mov\|mp4\)$" -exec egrep -iH 'keyword' {} \;

Раньше выводил мне 1) имя файла с полным путём 2) и найденное в нём совпадение. Мне важно соблюдения ОБА условия.

Теперь поиск заполнен этими строками

egrep: warning: egrep is obsolescent; using grep -E

между которых сложно найти результаты.

А всратое предложение использовать grep -E не показывает 1) путь и имя файла, где найдено совпадение. И результат становится для меня бесполезным - я ищу файл по содержимому а не безымянные изречения.

ВОПРОС

  1. Что делать? Прошу оба решения, как для подавления говноуведомления, чтобы продолжить пользоваться egrep, так и как grep заставить писать путь, где он нашёл.

  2. Почему так вообще произошло? Это же по факту деструктивное уведомление и упразднение утилит всегда БОЛЬ…

Буду рад подискутировать, но в первую очередь 1)

★★★

Последнее исправление: hikikomori (всего исправлений: 1)
  1. man grep<RET>/filename<RET>

  2. потому что упразднять иногда надо, а от добровольного прочтения release notes ты почему-то не перестал пользоваться egrep, только от боли. почему?

t184256 ★★★★★
()
  1. https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html

Потому что

This grep has been enhanced in an upwards-compatible way to provide the exact functionality of the historical egrep and fgrep commands as well. It was the clear intention of the standard developers to consolidate the three greps into a single command.

В то же время,

The old egrep and fgrep commands are likely to be supported for many years to come as implementation extensions, allowing historical applications to operate unmodified.

PS См. также
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/fgrep.html

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/egrep.html

vM ★★
()
Последнее исправление: vM (всего исправлений: 1)
Ответ на: комментарий от t184256

Спасибо. Но тут шаблон выдачи по -H без перевода строки после имени файла, а у egrep он был. Считывать массивы глазом тяжелее стало.

а от добровольного прочтения release notes ты почему-то не перестал пользоваться egrep, только от боли. почему?

Я ничего добровольно не читал, о чём вы?

hikikomori ★★★
() автор топика
Ответ на: комментарий от vM

Отключить это уведомление в egrep можно? Им же пользоваться невозможно из-за этого засоряющего текста.

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/fgrep.html

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/egrep.html

Not Found The requested URL was not found on this server.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)

сделай alias и ничего не придётся менять в скриптах

понял твою боль, сочувствую…

vasilisk_lo
()
Последнее исправление: vasilisk_lo (всего исправлений: 1)
Ответ на: комментарий от vM

PS См. также

Зачем тогда предлагать смотреть то, чего нет.

hikikomori ★★★
() автор топика
type egrep; file /usr/bin/egrep; cat /usr/bin/egrep
egrep is /usr/bin/egrep
/usr/bin/egrep: POSIX shell script, ASCII text executable
#!/bin/sh
exec grep -E "$@"
vM ★★
()
Ответ на: комментарий от hikikomori

Я только что проверил, и у меня как раз сабж убивается, а полезный вывод остаётся. Но попробуй заменить 2> на 1>, если у тебя почему-то наоборот.

P.S. Кстати, у меня выхлоп grep -E и egrep в твоём примере одинаковый — с именами файлов.

P.P.S. Ну и да, с чего бы ему быть не одинаковым, если cat /usr/bin/egrep:

#!/bin/sh
cmd=${0##*/}
echo "$cmd: warning: $cmd is obsolescent; using grep -E" >&2
exec grep -E "$@"
CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
[cppmm@damned ~]$ egrep -iH 'if' wtmp/tests/if.sh
wtmp/tests/if.sh:if [ "$VAR" == "as df" ]
[cppmm@damned ~]$ grep -iH -E 'if' wtmp/tests/if.sh
wtmp/tests/if.sh:if [ "$VAR" == "as df" ]
shell-script ★★★★★
()
Ответ на: комментарий от hikikomori

Ты что-то делаешь не так.

Но так как у меня не GNU grep а BSD grep, то воспроизвести и протестировать я не могу.

mord0d ★★★★★
()
Ответ на: комментарий от CrX

Ах вот они как? bash заглушка на grep? А самого egrep уже и нету? Ну ладно, я просто закомментировал там строку с echo. Всё равно grep пашет.

hikikomori ★★★
() автор топика
Ответ на: комментарий от shell-script

Поясните пожалуйста по /usr/bin/egrep:

cmd=${0##*/}

$() - это переменная из вывода внутри скобок, а что такое фигурные, regexp выражение? Тогда что там такое в 0##*/?

exec grep -E «$@»

И что такое $@ ?

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Отсюда и далее.

Ответ на непосредственные вопросы: ${0##*/} — сама команда (будет egrep в данном случае), $@ — все остальные аргументы командной строки.

CrX ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.