#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
который выполняет рекурсивный поиск по умолчанию и также обрабатывает stdin3. 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!