Найдите файлы, у которых есть общие слова

Еще более интересный, чем то, на что отвечают @Rush, является способностью перезапустить (и намного больше) систему, даже если система не отвечает на клавиатуру вообще. Но это должно быть, отвечают на ping (ICMP) пакеты.

Посмотрите здесь для полной документации и инструкций относительно того, как реализовать это.

4
04.11.2012, 15:19
3 ответа

Сначала генерируйте индексы для mainFile,

sed 's/ /\n/g' mainFile | sort | uniq > mainFile.idx

Затем сделайте grep для фиксированных строк:

grep -F -f mainFile.idx file*

6
27.01.2020, 20:49
  • 1
    Здорово. Я извлекаю основное имя файла со следующим: sed 's/:.*//' | sed 's/.*\///'; действительно ли это - хороший способ сделать это? Я, могло казаться, не нашел переключатель, который просто произведет основное имя файла. –  stariz77 04.11.2012, 13:02
  • 2
    @stariz77, не уверенный, если я получаю Ваш сценарий, но получить базовое имя, использует basename /path/to/file –  daisy 04.11.2012, 13:38
  • 3
    Вы поняли это прекрасный. Просто вывод от Вашей команды /path/to/file/file1:tawdry malicious, т.е. путь и список слов найдены. Я просто хочу имя файла (базовое имя) и никакой список найденных слов. Я думал, возможно, был путь к указать этот вывод с Вашим решением или чем-то. –  stariz77 04.11.2012, 13:45
  • 4
    @stariz77 I, кажется, получает его, получает имя файла в той ситуации, использует awk -F ':' { print $1 } –  daisy 05.11.2012, 06:19
  • 5
    или использование -l опция к grep. Кроме того, это не собирается распознавать слова. Таким образом, если, например, mainfile будет содержать "один", то он будет соответствовать всем файлам, которые содержат "уведенный", "мед"... Посмотрите "-w" опцию для этого. Также отметьте это \n в RHS sed's s команда не является стандартной (можно использовать tr вместо этого). Также обратите внимание, что Вам не нужен временный файл, можно использовать -f <(...) или передайте список слов на командной строке. –  Stéphane Chazelas 05.11.2012, 12:57

Если Ваш grep поддерживает нестандартное -w опция (для соответствующих слов):

grep -lwFe "$(tr -cs "[[:alnum:]_'-]" '[\n*]' < mainfile | sort -u)" file*
2
27.01.2020, 20:49

используйте этот код:

    for pattern in `cat mainfile`
    do
    grep -l "$pattern" file*
    done

ARUN

1
27.01.2020, 20:49

Теги

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