grep: подключение к grep -r работает некорректно

#grep #pipe #tcsh

#grep ( греп ) #труба #тцш #grep #tcsh

Вопрос:

Моя команда grep имеет псевдоним ‘grep -r’, в новой версии grep это вызывает у меня следующую проблему: при передаче одного grep другому второй grep не выполняет поиск того, что я хочу, из результата первого, как и должно быть, но он выполняет поиск по всей папке, как новый grep. например:

 grep -r "something" folder | grep -r "something2"
  

второй grep выполняет поиск по всей папке вместо поиска только выходных данных первого grep. это происходит из-за флага -r, без него все в порядке.
Предполагая, что я не хочу удалять этот флаг -r из моего псевдонима grep, есть ли какое-либо решение?

Комментарии:

1. вы могли бы использовать grep для второго, он переопределит псевдоним

2. другим предложением было бы использовать ripgrep который выполняет рекурсивный поиск по умолчанию и также обрабатывает stdin

3. TNX! ripgrep отлично работает! Я могу переименовать свой grep в ripgrep. но имеет ли ripgrep те же атрибуты, что и grep? те же флаги и все такое?

4. пожалуйста, не используйте псевдоним ripgrep для grep, используйте rg имя по умолчанию и сохраняйте grep отдельно … и нет, rg у него разные функции, а некоторые флаги отличаются.. У меня есть руководство , если вы хотите ознакомиться с основами

Ответ №1:

Извините, но второе grep -r не имеет смысла:

grep -r означает рекурсивный запуск grep, поэтому смотрите не только на текущую папку, но и на вложенные, вложенные и более глубокие папки.

Во-первых grep -r , я могу относиться к этому так: ищите «что-то» в папке и во всех вложенных папках, но во-вторых: как только вы нашли «что-то» внутри одного конкретного файла, я хочу, чтобы вы проверили все вложенные, вложенные и более глубокие папки на предмет «something2».

Как вы можете глубже проникнуть в структуру каталогов, пока вы проверяете внутри одного файла?

Я бы посоветовал вам не добавлять -r переключатель в свой grep псевдоним.

Комментарии:

1. но тогда мне придется добавлять -r каждый раз, когда я захочу выполнить рекурсивный поиск чего-либо. который используется чаще…

2. @maorshariki: что ты пытаешься сделать? Вы ищете фрагмент текста в файле, который находится где-то внутри некоторой структуры каталогов. Как только вы обнаружили вхождение этого фрагмента текста внутри определенного файла, расположенного в некотором каталоге, что именно вы хотите сделать?

3. Я хочу выполнить поиск в этом фрагменте текста, чтобы найти что-то в нем, не удаляя флаг -r из моего псевдонима grep , потому что тогда мне придется добавлять его каждый раз, когда я хочу выполнить поиск в каталоге

4. Извините, но я не думаю, что это хорошая идея использовать grep -r в качестве стандартного псевдонима для grep : я работаю на платформах UNIX в течение нескольких лет, и вместо grep -r я всегда использовал следующую систему: find <dir> -exec grep "something" {} /dev/null ; . Я признаю, что это довольно трудоемкий текст, но он чрезвычайно гибкий и служит всем целям.

5. Неважно, у меня есть решение. Как и предлагалось выше, я все равно использую ripgrep … tnx!