2017-02-22 3 views
-1

Мне нужно сначала искать файлы в библиотеке, в которых нет строки. Затем из результирующих имен файлов мне нужно искать файлы со строкой.Ищите файлы в каталоге (в среде Putty), у которых нет строки

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

Спасибо!

+0

*** Пожалуйста *** прочитать http://stackoverflow.com/help/how-to-ask http://stackoverflow.com/help/dont-ask и HTTP: // StackOverflow .com/help/mcve, прежде чем отправлять больше вопросов здесь. Удачи. – shellter

+0

Может кто-то PLS поделиться взглядами на этот, я был застрял здесь, спасибо! – Rhea

ответ

0

Вот несколько идей и cmds для поиска.

(Ваше описание проблемы мне не ясно, поэтому я даю вам то, что кажется наиболее вероятным решением, которое вы просите) ..

Учитывая тестовый файл

echo "a 
b 
c 
d" > /tmp/testFile.txt 

вы можете поиск «слова» (или символ) в этом файле с

grep d /tmp/testFile.txt ; echo $? 

который будет возвращать

d 
0 

0 указывает успешно выполненный cmd, тогда как 1 (или другое ненулевое значение) указывает на возникшую ошибку.

Теперь добавьте опцию -l в grep, который говорит «список» файлы, которые отвечают требованиям опций, поставляемых:

grep -l e /tmp/testFile.txt ; echo $? 

возвращается только

1 

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

В отличие от поиска строки, которая действительно существует в файле выглядит

grep -l d /tmp/testFile.txt ; echo $? 

/tmp/testFile.txt 
0 

с указанием цели поиска был найден.


Теперь вам нужен способ, чтобы получить список всех файлов для поиска по Grep,

cd /path/to/starting/dir/to/search # you know what to put here, right? 
find . -name '*.txt' 

будет производить список всех .txt файлов в текущем каталоге и во всех подкаталогах текущий каталог.

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

srchStr="e" 
cd /path/to/starting/dir/to/search # you know what to put here, right? 
find . -name '*.txt' \ 
| while read file ; do 
    if ! grep -q "$srchStr" "$file" ; then 
     echo "no $srchStr in $file" 
    fi 
done 

Конечно, это не будет соответствовать вашим потребностям. Но, пожалуйста, напишите новый Q с некоторым кодом, и другие могут помочь вам. Я не могу тратить больше времени на это (в ближайшее время). Ищите учебники по unix find, что является ключом к перечислению всех файлов, поэтому вы можете искать их через grep.

IHTH

Смежные вопросы