Сборка ядра Linux: не должно ли defconfig выдавать один и тот же файл .config?

Вы можете сделать это разными способами, как показано. Шаблоны сохраняются по одному на строку в файле списка.

Примечание. Мы отличаем файл шаблонов от остальных файлов данных (предположительно, ваших файлов * cha ) с помощью различных уловок в bash, perl и sed. В случае "sed" шаблоны хранятся в точечном файле, также известном как скрытые файлы, & с добавлением "." чтобы помочь коду "sed" отличить файл шаблона от обычного файла данных. Это WA для sed, поскольку он не имеет, как в awk, концепции "FNR".

Grep

grep -E -f ./.your_patterns_listfile ./* |
sed -e 's/://' -e 's/v|//'

Perl

find . -maxdepth 1 -type f -name '*' -exec \
   perl -wMstrict -Mvars='*pat' -lne '
      BEGIN { ($pat) = @ARGV; }
      if ( $pat ne $ARGV ) {
         @pat = map { quotemeta } keys %pat unless @pat;
         next unless /^From file [<]/ .. /^--*/;
         my $cha;
         /^From file [<]([>]*)[>]/ and $cha = $1;
         for my $pat ( @pat ) {
            /^\s+ (\d+) \s+ v[|] ($pat) $/x and print(join("\t",$ARGV,$1,$2)),last
         }
      } else {
         $pat{$_}++;
      }
   ' ./your_patterns_listfile {} +

Sed

echo '.' >> ./.your_patterns_listfile
find . -maxdepth 1 -type f -name '*' -exec \
   sed -e '
      1{
         :pats
            N
         /\n\.$/!bpats
         s///;h;d
      }

      /^From file </!d
      $d;N
      /\n[ ]*\([1-9][0-9]*\)[ ]v|/{
         s//\n\1\t|/;s/$/|/
         G;s/\n/&&/;s/$/\n/
         /\n\n[1-9][0-9]*\t|\([^|]*\)|.*\n\1\n/{
            s/^From file <\([^>]*\)>\n\n\([1-9][0-9]*\)\t|\([^|]*\)|/\1\t\2\t\3\n&/
            P;s/\n\n.*//;D
         }
      }
      s/\n.*//;s/^/\n/;D
   ' ./.your_patterns_listfile {} +

Bash

find . -type f -name '*' ! -name 'your_patterns_listfile' -exec \
   sh -c '
      shift $1
      flag=
      eval "`echo '\''readonly NL=qsq'\'' | tr '\''qs'\'' '\''\047\012'\''`"; # newline
      pats=$(< $1); shift
      cat "$@" |
      while IFS= read -r line
      do
         case $line in
            "From file <"* )
               cha=${line#*"<"}
               cha=${cha%">"}
               unset flag
               continue
               ;;

            *[0-9]*v\|* )
               pat=${line#*"|"}
               num=${line%%"v"*}
               num=${num//[ ]/}
               case $pats in
                  "$pat" | *"$NL$pat$NL"* | "$pat$NL"* | *"$NL$pat" )
                     ${flag+":"} printf "%s\t" "$cha" "$num" "$pat"
                     ${flag+":"} echo
                     ;;
               esac
               ;;

            '' | *[!-]* )
               :
               ;;

            * )
               flag=
               ;;
         esac
      done
   ' 2 1 ./your_patterns_listfile {} +
2
21.07.2015, 17:09
0 ответов

Теги

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