@MichaelShav

Как изменить вывод grep?

Не могу разобраться с выводом grep. Нужно найти файлы, которые содержат определенную строку, но вывод сделать в формате Полный путь к файлу, имя и размер.
на данный момент делаю grep -r "something" /path
вывод: path/to/file:string
пытаюсь сделать Path: Path/to/file Name: Name Size: SizeKB
аналог -printf в find в общем ищу, там это делается добавлением -printf "Path: %p Name: %f Size: %kKB\n"
заранее спасибо))
  • Вопрос задан
  • 1680 просмотров
Решения вопроса 2
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
У grep нет таких опций, поэтому нужно обработать вывод grep чем-нибудь еще.
Простенький пример вот:
grep -r -l "something" | xargs stat --format="Name: %n Size: %B"


Ну можно еще path и name конечно разделить, но это будет посложнее команда типа так:

while read; do
  MYPATH="${REPLY%/*}"
  MYNAME="${REPLY##*/}"
  SIZE="$(stat --format='%s' ${REPLY})"
  [[ "${MYPATH}" == "${MYNAME}" ]] && MYPATH=""

  echo "Path: ${MYPATH}/ Name: ${NAME} Size: ${SIZE}"
done<<<$(grep -r -l "alias")
Ответ написан
shambler81
@shambler81 Куратор тега Linux
find /etc/nginx  -type f  -exec grep -l 3dpaneli.ru {} \; | xargs ls -lah

find - искать в каталоге
-type f только имена файлов
-execвыполнить команду с найденым файлом
grep -l - не выводить сам греп а выводить имя файла в котором он нашел
{} - то что на выводе у find
\; - просто заканчиваем файнд
|- вывод передаем следующей команде
xargs ls -lah xargs почитай отдельно короче он передаст вывод пути файла на ls -lah и получаем все че хочеш
5fd0f0daa8e29240627639.png

если тебе нужно обрезать вообще все лишнее то тут уже можно awk в общем там уже будет проще удалить лишние колонки
спасибо кэп, отметил как решенный.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
uranik
@uranik
grep 'X-Failed-Recipients:' *.eml | sed 's/.*X-Failed-Recipients: //'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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