Поиск условий в ряде файлов

Это - коммерческая 64-разрядная операционная система UNIX HP (на основе ядра Маха - который Mac OS X также на основе),

Это для архитектуры системы команд Alpha только - хотя был недолгий порт Intel.

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

2
08.11.2012, 00:47
2 ответа

Это немного хитро, если Вы хотите объяснить условия, которые могут наложиться, например, одна строка, содержащая banana достаточно должен рассчитать как использование обоих ban и nan.

Вот минимально протестированный, быстрый-и-грязный сценарий жемчуга. Это читает строки для поиска (иглы) и имена файлов, затем создает регулярное выражение, которое соответствует любой из игл. Когда это находит соответствие, это удаляет совпавшую строку из набора игл и восстанавливает regex. Иглы, которые перенесены в конце, являются теми, Вы после.

#! /usr/bin/env perl
open FILENAMES, "<", "files_to_search.out" or die $!;
@filenames = <FILENAMES>;
close FILENAMES;
chomp foreach @filenames;
open NEEDLES, "<", "terms_to_search.out" or die $!;
@needles = <NEEDLES>;
close NEEDLES;
chomp foreach @needles;
%needles = map {$_, 1} @needles;
sub build_re {
    $re = qr/(@{[join("|", map quotemeta, keys %needles)]})/;
}
@ARGV = @filenames;
while (<ARGV>) {
    while (/$re/) {
        delete $needles{$1};
        exit if !%needles;
        build_re();
    }
}
print map "$_\n", sort keys %needles;
1
27.01.2020, 22:07

быстрая ужасная попытка одного лайнера (с GNU grep для -o опция):

grep -of terms_to_search_out $(cat files_to_search.out | tr '\n' ' ') | sort | uniq | grep  -vf terms_to_search_out 
2
27.01.2020, 22:07
  • 1
    Обратите внимание что весь из \n, \t и пространство используется по умолчанию для разделения замен команды, таким образом, нет никакого смысла изменения '\n' кому: ' '. Ограничение IFS к новой строке и делает обратная конверсия даже имела бы больше смысла, так как символы новой строки, менее вероятно, произойдут в именах файлов, чем пробелы. Также обратите внимание, что поколение имени файла также выполняется (кроме zsh) на замену команды, таким образом, символы пробела в именах файлов не являются единственными проблематичными (см. set -f отключить поколение имени файла). –  Stéphane Chazelas 08.11.2012, 00:27
  • 2
    узнает, что что-то повседневное новое - не знало о \n значения по умолчанию. Поэтому, возможно, пройдите через sed для добавления кавычек? или пойдите с для цикла? –  Drake Clarris 08.11.2012, 17:00

Теги

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