GREP - поиск всех вхождений строки
-
21-09-2019 - |
Вопрос
Мне поручено пометить приложение белым цветом, чтобы оно не содержало ссылок на нашу компанию, веб-сайт и т.д.Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть много различных шаблонов для поиска, и я хотел бы гарантировать, что все шаблоны будут удалены.Поскольку приложение не было разработано собственными силами (полностью), мы не можем просто искать вхождения в messages.properties и готово.Мы должны использовать JSP, Java-код и xml.
Я использую grep для фильтрации результатов следующим образом:
grep SOME_PATTERN . -ir | grep -v import | grep -v // | grep -v /* ...
Шаблоны экранируются, когда я использую их в командной строке;однако я не считаю, что такое сопоставление с шаблоном является очень надежным.Возможно, могут быть вхождения, в которых есть import (маловероятно) или даже /* (начало комментария javadoc).
Весь текст, выводимый на экран, должен быть взят из какого-либо строкового объявления или файла констант.Итак, я могу предположить, что найду что-то вроде:
public static final String SOME_CONSTANT = "SOME_PATTERN is currently unavailable";
Я хотел бы найти это явление, а также:
public static final String SOME_CONSTANT = "
SOME_PATTERN blah blah blah";
В качестве альтернативы, если бы у нас был внутренний поисковик / автоматизированные тесты, я мог бы просто извлечь xhtml с каждой страницы и проверить исходный код, чтобы убедиться, что он чистый.
Решение
Я бы использовал сэд, не grep ( греп )!Sed используется для выполнения базовых текстовых преобразований во входном потоке.Попробуй s/regexp/replacement/
опция с помощью команды sed.
Вы также можете попробовать авк команда.У него есть возможность -F для разделения полей вы можете использовать его с ; для разделения строк ваших файлов с ;.
Однако лучшим решением будет простой скрипт в Perl - язык программирования или в Питон.
Другие советы
Чтобы решить вашу проблему по поводу пропуска некоторых вхождений, почему бы не фильтровать постепенно:
- Создайте текстовый файл со всеми возможными совпадениями в качестве отправной точки.
- Используйте filter X (grep для '^import', например), чтобы сбрасывать вероятные ложные положительные результаты в файл tmp.
- Снова используйте фильтр X, чтобы удалить эти совпадения из вашего рабочего файла ( копия [1]).
- Выполните быстрый визуальный просмотр файла tmp и добавьте все реальные совпадения обратно в.
- Повторите [2]-[4] с другими фильтрами.
Конечно, это может занять некоторое время, но не похоже, что это то, что вы хотите сделать неправильно...