57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
1

Как убрать лишнее из вывода grep?

20.06.2016, 11:37. Показов 14869. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! Совсем недавно перешёл на Linux, возник вопрос по поводу команды grep
Есть BASH скрипт:
Bash
1
2
3
4
5
6
7
8
9
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
grep -rni base64   >virus.txt
grep -rni GLOBALS   >virus.txt
grep -rni REQUEST   >virus.txt
grep -rni POST   >virus.txt
grep -rni window.location   >virus.txt
grep -rni preg_replace   >virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
В файле virus.txt вижу следующее:
"wp-content/plugins/cyr3lat/cyr-to-lat.php:75: $title = preg_replace("/[^A-Za-z0-9'_\-\.]/", '-', $title);"
Вопрос: как из вывода убрать всё, что идёт после двоеточия (то, что надо убрать выделено жирным)?

Добавлено через 5 минут
Нашёл ключ "-l", но он обрезает номер строки, где находится совпадение.

Добавлено через 4 минуты
Т.е. сейчас вывод строки такой:
wp-content/plugins/cyr3lat/cyr-to-lat.php , а надо чтобы был такой: wp-content/plugins/cyr3lat/cyr-to-lat.php:75

Добавлено через 6 минут
Нашёл для себя решение:
Bash
1
2
3
4
5
6
7
8
9
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
grep -roin base64   >virus.txt
grep -roin GLOBALS   >virus.txt
grep -roin REQUEST   >virus.txt
grep -roin POST   >virus.txt
grep -roin window.location   >virus.txt
grep -roin preg_replace   >virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2016, 11:37
Ответы с готовыми решениями:

Как убрать лишнее
Привет.Помогите отрезать лишнее от линка. Несмогла наити ответ. Есть разные линки т.е....

Как убрать лишнее?
Добрый день! Работаю на Joomla 2.5.7 Вчера вечером делал сайт, заполнял некоторой информацией, но...

Как убрать лишнее пространство
Приветствую вас. Подскажите пожалуйста, как убрать лишнее пространство отмеченное на картинке. Тема...

Как убрать «лишнее» из массива?
Доброго времени суток! Уважаемые форумчане, Появилась архисложная для меня задачка. Пожалуйста...

21
Эксперт по компьютерным сетямЭксперт NIX
12999 / 7393 / 798
Регистрация: 09.09.2009
Сообщений: 28,943
20.06.2016, 11:53 2
ключ -o будет выводить лишь шаблон
0
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
20.06.2016, 14:53 3
А почему вы не используете такую конструкцию?
Bash
1
grep -eroin "base64|GLOBALS|REQUEST|POST|window.location|preg_replace" > virus.txt
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 15:00  [ТС] 4
Bash
1
grep: base64|GLOBALS|REQUEST|POST|window.location|preg_replace: Нет такого файла или каталога
0
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
20.06.2016, 15:02 5
Я опечатался.
Bash
1
grep -eroin "base64|GLOBALS|REQUEST|POST|window.location|preg_replace" /path/to/scan > virus.txt
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 15:03  [ТС] 6
Ваш скрипт у меня почему-то не работает - не ищет файлы.

Добавлено через 59 секунд
А path/to/scan как-то убрать можно? Чтобы он искал в директории, в которой находится?
0
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
20.06.2016, 15:04 7
Bash
1
grep -eroin "base64|GLOBALS|REQUEST|POST|window.location|preg_replace" . > virus.txt
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 15:24  [ТС] 8
Bash
1
2
3
4
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
grep -lroin -e "base64" -e "GLOBALS" -e "REQUEST" -e "POST" -e "window.location" -e "preg_replace"  | cat -n   >virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
Переписал вот так. Значительно увеличилось содержимое файла virus.txt - строк на 600, там ещё файлы перевода, js файлы и.т.д. А можно сделать так, чтобы он искал только в php файлах?
0
Эксперт по компьютерным сетямЭксперт NIX
12999 / 7393 / 798
Регистрация: 09.09.2009
Сообщений: 28,943
20.06.2016, 15:25 9
Цитата Сообщение от caesarnn Посмотреть сообщение
А можно сделать так
Bash
1
man grep
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 15:26  [ТС] 10
Выполнил:
Bash
1
grep -eroin "base64|GLOBALS|REQUEST|POST|window.location|preg_replace" . > virus.txt
Получил:
grep: base64|GLOBALS|REQUEST|POST|window.location|preg_replace: Нет такого файла или каталога
grep: .: Это каталог
0
1362 / 1074 / 110
Регистрация: 16.03.2012
Сообщений: 4,543
20.06.2016, 15:28 11
Это потому что я по памяти спутал параметр -e и -E
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 15:53  [ТС] 12
Bash
1
2
3
4
5
6
7
8
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
find ./ -type f -name "*.php" -exec grep -rlni -H "base64"  {} \; > virus.txt
find ./ -type f -name "*.php" -exec grep -rlni -H "REQUEST"  {} \; > virus.txt
find ./ -type f -name "*.php" -exec grep -rlni -H "POST"  {} \; > virus.txt
find ./ -type f -name "*.php" -exec grep -rlni -H "window.location"  {} \; > virus.txt
find ./ -type f -name "*.php" -exec grep -rlni -H "preg_replace"  {} \; > virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
Добавлено через 9 минут
Сделал вот так, чтобы искал только по *.php файлам.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7761 / 4592 / 2821
Регистрация: 22.11.2013
Сообщений: 13,060
Записей в блоге: 1
20.06.2016, 16:20 13
caesarnn,
1)
Bash
1
 ... > file
убивает предыдущее содержимое в file, используйте ">>", для всех строк, кроме первой.

2) вы кормите grep файлами, в этой ситуации ключ -r излишен.

3) несколько grep легко заменяются одним:
Bash
1
 ... grep -lniH "base64\|REQUEST\|POST\|window\.location\|preg_replace" ...
4) пачка вызовов grep легко заменяется вызовом grep с пачкой файлов, что влияет на производительность:
Bash
1
 ... '{}' + >> virus.txt
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 17:32  [ТС] 14
Спасибо. Т.е. конечный вариант файла такой:
Bash
1
2
3
4
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
find ./ -type f -name "*.php" -exec grep -lni -H "base64\|REQUEST\|POST\|window\.location\|preg_replace"  '{}'  + >> virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
Добавлено через 2 минуты
Попытался добавить
Bash
1
| cat -n
, пишет, что "cat: +: Нет такого файла или каталога
find: отсутствует аргумент у «-exec»"

Добавлено через 36 секунд
Т.е.
Bash
1
find ./ -type f -name "*.php" -exec grep -lni -H "base64\|REQUEST\|POST\|window\.location\|preg_replace"  '{}' |cat -n + >> virus.txt
Добавлено через 13 секунд
Не работает.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7761 / 4592 / 2821
Регистрация: 22.11.2013
Сообщений: 13,060
Записей в блоге: 1
20.06.2016, 17:46 15
Я б чуть изменил:
Bash
1
2
3
4
5
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
date > virus.txt
find . -type f -name "*.php" -exec grep -lni -H "base64\|REQUEST\|POST\|window\.location\|preg_replace"  '{}'  + >> virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
С одной стороны полезно иметь в начале дату сканирования, с другой, без очистки файла он будет постоянно расти...

Добавлено через 6 минут
Цитата Сообщение от caesarnn Посмотреть сообщение
Не работает.
Что именно не работает?

Bash
1
2
3
4
5
6
7
cat <<EOF > test1.php
base64
REQUEST
POST
window.location
preg_replace
EOF
Bash
1
find . -type f -name "*.php" -exec grep -ni -H "base64\|REQUEST\|POST\|window\.location\|preg_replace"  '{}'  + | cut -d: -f-2
Код
./test1.php:1
./test1.php:2
./test1.php:3
./test1.php:4
./test1.php:5
Добавлено через 5 минут
Поведение "-l" состоит не только в убирании вывода найденного:
-l, --files-with-matches
Suppress normal output; instead print the name of each input
file from which output would normally have been printed. The
scanning will stop on the first match.
что на великом и могучем означает примерно
Подавить обычный вывод; вместо этого печатать имя каждого входного файла, из которого печатался бы обычный вывод. Сканирование прерывается после первого совпадения.
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 18:40  [ТС] 16
И ещё такой вопрос - сейчас мой скрипт выглядит вот так:
Bash
1
2
3
4
5
6
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
date > virus.txt
find . -type f -name "*.php" -exec grep -lni -H "base64\|REQUEST\|POST\|window\.location\|preg_replace"  '{}'  + >> virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
rm  $(cat virus.txt)
(последняя строка удаляет по списку файлы из virus.txt)
Как мне сделать так, чтобы скрипт меня спрашивал - начинать удаление, или нет?
И ещё - Ваш код просто печатает дату в файл virus.txt - "Пн июн 20 18:12:02 MSK 2016"

Добавлено через 1 минуту
Странно.. и мой прошлый код тоже ничего не пишет в файл

Добавлено через 4 минуты
А выполнение строки
Bash
1
find . -type f -name "*.php" -exec grep -lni -H "base64\|REQUEST\|POST\|window\.location\|preg_replace"  '{}'
отдельно в терминале выдало отсутствие аргумента у exec

Добавлено через 9 минут
Всё работает, спасибо. Видимо, компьютер глючит.

Добавлено через 3 минуты
Как мне сделать так, чтобы скрипт меня спрашивал - начинать удаление, или нет?

Добавлено через 5 минут
Решил так:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
echo "Подождите.Идёт сканирование сайта."
date > virus.txt
find . -type f -name "*.php" -exec grep -lni -H "base64\|REQUEST\|POST\|window\.location\|preg_replace"  '{}'  + >> virus.txt
echo "Сканирование сайта успешно завершено. Результаты сканирования находятся в файле virus.txt"
echo -n "Запустить удаление файлов? (y - да/n - нет) "
 
read item
case "$item" in
    y|Y) echo "Ввели «y», продолжаем..."
        ;;
    n|N) echo "Ввели «n», завершаем..."
        exit 0
        ;;
    *) echo "Ничего не ввели. Выполняем действие по умолчанию..."
        ;;
esac
rm  $(cat virus.txt)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7761 / 4592 / 2821
Регистрация: 22.11.2013
Сообщений: 13,060
Записей в блоге: 1
20.06.2016, 19:40 17
С одной стороны, вы хотели получать имя_файла:номер_строки, с другой -- кормить этим списком rm. Как-то непоследовательно, не находите? -n лишний, хоть и не работает.
0
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
20.06.2016, 20:10  [ТС] 18
Номер строки уже не нужен. И ещё такой вопрос (не знаю, реализуемо ли это вообще). Суть в том, чтобы научить скрипт искать обфусцированный код. Например, этот (простой Hello World на PHP):
PHP
1
<?php $J949904C32448ABDC8A9811E7EC69A1C8="eNptksuSojAARX8pEJhpFrMQO4DRRBPywOyAWE0loLRNq+Trp2c/+1unTtW5p5C8nWB+67cbXzv/5O8fL+LGnDi2ckECeSfrUbKVuD5wz7cEEUgdgqcaj+.../zmsft7X/vcpJH/+AlLu0/Y=";eval(base64_decode(gzuncompress(base64_decode($J949904C32448ABDC8A9811E7EC69A1C8))));?>
Заметил, что здесь очень часто чередуются маленькие и большие буквы (даже если смотреть в пределах одной строки). Можно ли как-то заставить скрипт искать данные чередования в одной строке, и, если их количество превышает n-раз, тоже выводить в текстовый файл?

Добавлено через 3 минуты
base64_decode и прочие вхождения он ищет, как заставить его анализировать непосредственно обфусцированный код? Хотя бы, в какую сторону копать?
0
5925 / 1968 / 321
Регистрация: 10.12.2013
Сообщений: 6,799
20.06.2016, 22:25 19
Цитата Сообщение от caesarnn Посмотреть сообщение
Можно ли как-то заставить скрипт искать данные чередования в одной строке, и, если их количество превышает n-раз, тоже выводить в текстовый файл?
Perl
1
perl -ne '( () = /([[:upper:]]+ [\d]* [[:lower:]]+)/gx ) > 10 and /^\S+$/ ? print : 0' somefile.txt
- где 10 - эвристическое число чередований в строке больших и маленьких букв без пробелов, но с возможным включением цифр(ы)
1
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
21.06.2016, 09:22 20
caesarnn, Я бы (в который раз) посоветовал изложить полную окончательную задачу, а не клепать франкенштейна из отдельных кусков.
0
21.06.2016, 09:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2016, 09:22
Помогаю со студенческими работами здесь

Как убрать из папок все лишнее?
Ребят помогите. Вообще в одной папки много папок и в тех папках есть одинаковые don.txt ! Как...

Как убрать лишнее из компилированного ексешника?
Вот такая проблема : откомпилировал в VB 6.0 ексешник, загрузил его в какой- то текстовый редактор...

Как убрать лишнее с главной страницы?
Нужно убрать то что выделено, я перерыл весь wordpress (web интерфейс) так и не нашел, это нужно...

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

Как убрать лишнее время при конвертации в видео?
всем привет! очень прошу помощи! проблема такая: PP неверно конвертирует презентацию с...

Убрать лишнее
Здравствуйте, подскажите можно ли убрать(и как это сделать) то что я на скриншотах выделил красным?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru