2010-11-09 2 views
0

это строка поиск был предоставлен Paul.R (высоко ценится Paul):Shell Строка поиска скрипта, где «#» не в 1-го символа позиция

** найти реж -типа х -print0 | xargs -0 grep -F -f strings.txt **

Примечание. Я использую приведенный выше аргумент поиска, чтобы выполнить поиск в рекурсивном каталоге поиска жестко закодированных имен путей в сценариях оболочки. Однако из-за ограничений среды Unix (TRU64) я не могу использовать ключ GREP -r для выполнения поиска в моем каталоге. Следовательно, использование приведенного выше решения.

В качестве дополнительных критериев я хотел бы расширить этот аргумент поиска, чтобы исключить любой текст, где первый главный символ искомой строки является «#» (символ комментария).

Пойду за отзыв.

... Спасибо Эван

ответ

0

Я предполагаю, что вы просто пытаетесь ограничить результаты в выводе команды вы публикуемую. Если это так, то как насчет

найти dir-type f -print0 | xargs -0 grep -F -f strings.txt | Grep -v «^ #»

Окончательный конвейеру команды будет игнорировать все строки, которые соответствуют регулярному выражению^# (начинается с # полукокса)

+0

Patrick, спасибо за отзыв. К сожалению, это не совсем так. Исходная команда, которую я отправил, выводит имя пути и файл, которому принадлежит строка, начиная с первой позиции символа. Мне нужно это, чтобы идентифицировать скрипты, которые удовлетворяют моим критериям поиска. Если я grep набор результатов, символ комментария может существовать в любой позиции символа. Я понимаю, что я могу в этом случае опустить символ «^», однако как я могу отличить использование «#» как часть комментария, а не символ на любой части этой строки? –

+0

То, что я пытаюсь достичь, сначала отфильтровать все строки, у которых есть комментарий, начинающийся в позиции 1 всех скриптов, а затем передать этот результат в поиск имен путей в этих сценариях. –

+0

1. Чтобы отфильтровать данные, в которых хэш действует, чтобы сигнализировать комментарий, но не там, где хеш действует как символ, вам нужно выяснить, что в коде сигнализирует, что хэш действует как символьный литерал. 2. Это команда для одноразового проекта (где мы могли бы сделать несколько проходов) или использовать его для какой-либо другой цели? Мне пришлось немного убрать ваш оригинальный пост, но помогает ли это (вы можете повторно вставить второй grep, чтобы получить функциональность, которую я удалил - find. -type f -print0 | xargs -0 cat | grep -v '^ [ \ t] * # '| grep -v^$ - это должно вас начать –

0

Это решение не будет работать, если путь к файлу и файлов содержится в файле strings.txt, но он может работать в вашей ситуации.

find dir -type f -print0 | xargs -0 grep -v '^#' | grep -F -f strings.txt