Используйте “grep” для соответствия тексту в нескольких файлах

Это могло легко быть сделано остротой. Это не рекурсивно и должно быть относительно быстрым способом сделать это в ударе. Вызов pwd в каждом цикле не особенно быстр, поэтому избегайте, если Вы можете.

#!/bin/bash
if [ -n "$1" ]; then
    echo "Usage: $0 [FILE]"
    exit 1
fi
cd -P -- "$1"
IFS="/"
set -f # turn off globbing for the expansion of $PWD below
for dir in $PWD; do
    stat -c "$PWD %A" .
    cd ..
done

Альтернатива, острота для текущего каталога.

(IFS="/"; set -f; for dir in $PWD; do stat -c "$PWD %A" .; cd ..; done)
6
30.08.2011, 07:46
4 ответа

Если Вы не знаете, где точно файлы расположены, но знают свои имена, можно использовать find:

find .  \( -name "filename1" -o -name "filename2" \) -exec grep "<grepstatement>" '{}' \; -print

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

7
27.01.2020, 20:20
  • 1
    1. Вы используете "и" вместо "или" логика между файлами, 2. Нет никакой потребности в смешивании find в это, 3. Какова была бы цель -print в конце?! –  rozcietrzewiacz 29.08.2011, 18:29
  • 2
    с и/или. Я просто зафиксировал его. У Вас также есть точка о не необходимости использовать, находят, я использую команду, когда я не знаю что, в котором вещи файла находятся, но знают, какую информацию я ищу. –  Mark D 29.08.2011, 18:48
  • 3
    Хорошо, таким образом, я отредактировал так, чтобы это выглядело более выровненным по ширине. Но отметьте то использование -print в конце не слишком хорошо (моя 3-я точка в предыдущем комментарии) - это портит вывод; если Вы хотите изучить местоположение файлов, просто используйте grep -H вместо этого. –  rozcietrzewiacz 29.08.2011, 18:54

Просто добавьте все файлы на командной строке. Можно ли использовать * или? или независимо от того, что Ваша оболочка позволяет как заполнитель.

Из страницы справочника:

grep [OPTIONS] PATTERN [FILE...]

средства: столько файлов, сколько Вы желаете.. или ни один, если Вы хотите к grep stdin/pipe.

7
27.01.2020, 20:20
grep 'mydata' *

Звезда * символ показывает, что Вы хотите искать в нескольких файлах. Если Вы хотите перерыть несколько файлов в нескольких каталогах, можно добавить -R для рекурсивного поиска.

grep 'mydata' * -R
6
27.01.2020, 20:20
  • 1
    umm, я, может казаться, не использую нормальные шаблоны файла как *.lua здесь..? –  phil294 09.05.2017, 07:05

сначала скомпилируйте программу с помощью опции -static , а затем протестируйте ее. если он работает как статический, то на малине pi

cat "programname" | grep "lib*"
/lib/ld-linux.so.3
libc6.so 

, затем проверить все libs, если они там

я решил так. У меня есть /lib/ld-linux-armhf-so.3 , но нет /lib/ld-linux.so.3 затем сделать ln -s между работал на меня

-121--50153-

Я в конечном итоге сделал:

grep -rli 'match _ me' -- file1 file2 file3

Похоже, что в системах Debian/Bash широко стандартно, что двойной тире без имени означает, что больше флаги не могут быть определены; Часто подразумевается, что все оставшиеся аргументы являются путями к файлам. Несмотря на отказ от ответственности, я не знаю, является ли это предполагаемым семантическим или просто симптомом, который подходит для инструментов, которые я использую.

1
27.01.2020, 20:20

Теги

Похожие вопросы