Распечатайте несопоставленные шаблоны, с помощью grep с шаблонами из файла

Что-то подобное произошло со мной.

Поскольку это было куплено за границей, ноутбук, который я использовал, имел аппаратные средства Wi-Fi, которые поддерживали меньше каналов, чем те поддерживаемые AP (который был локален). AP было настроено для автоматического выбора канала в зависимости от других сетей, существующих в области.

Это выбрало канал, который не поддерживался ноутбуком. Я обнаружил это при помощи sudo iwlist eth1 channel это отобразило меньше значений (1 - 11 только), в то время как AP отображало больше возможностей (1 - 13, веб-интерфейс показывал ту деталь).

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

Оборотная сторона: теперь, если многие люди используют канал, я выбрал, сетевая производительность, возможно, повлияться.

15
07.04.2015, 02:42
5 ответов

Вы могли бы использовать GREP -O , чтобы напечатать только соответствующую часть и использовать результат как шаблоны для второго GREP -V на оригинальном Paints.txt Файл:

grep -oFf patterns.txt Strings.xml | grep -vFf - patterns.txt

Хотя в этом конкретном случае вы также можете использовать + Сортировка :

join -t\" -v1 -j2 -o 1.1 1.2 1.3 <(sort -t\" -k2 patterns.txt) <(sort -t\" -k2 strings.xml)
25
27.01.2020, 19:49

Лучший подход - это, наверное, что предложил @don_crissti, поэтому вот вариация на той же теме:

$ grep -vf <(grep -Po 'name=\K.+?"' Strings.xml) patterns.txt
"ExitWarning"
"SomeMessage"
"Help"

Это в основном - это подход @ don_crissti. Он использует GREP с помощью совместимых Perl регулярных выражений ( -P ) и переключатель ) и , чтобы распечатать только соответствующую часть линии. Затем Regex ищет имя = и отбрасывает его ( \ k ), а затем ищет один или несколько символов до первого » ( , +? »). Это приводит к списку шаблонов, присутствующих в файле string.txt , который затем передается в качестве ввода на обратный GREP ( GREP -V ) с использованием замены процесса ( <(команда) ).

5
27.01.2020, 19:49

Я бы, наверное, использовал разрез . То есть, если, как кажется, вы знаете, где ожидать строку в кавычках, которую вы ищете.

Если я сделаю:

{   cut  -sd\" -f2 |
    grep -vFf- pat
}   <<\IN
#   <string name="Introduction">One day there was an apple that went to the market.</string>
#   <string name="BananaOpinion">Bananas are great!</string>
#   <string name="MessageToUser">We would like to give you apples, bananas and tomatoes.</string>
IN

... после сохранения моей собственной копии вашего примера patterns.txt в pat и выполнения вышеуказанной команды, вывод будет:

"ExitWarning"
"SomeMessage"
"Help"

cut выводит в стандартный вывод только второй " двойные кавычки -d исключенный -f поле для каждой строки ввода, совпадающей с разделителем, и -s подавляет все остальные.

То, что cut на самом деле печатает в grep , это:

Introduction
BananaOpinion
MessageToUser

grep ищет в своем именованном файловом операнде строки, которые -v не соответствует фиксированным строкам -F в его - шаблоне stdin -f файл.

Если вы можете положиться на второе поле " -delimited в качестве подходящего, тогда это определенно будет оптимизация по сравнению с режимом grep -P erl, просто сопоставив -F фиксированные струны и только крошечные их части, потому что cut делает тяжелую работу - и делает это быстро .

2
27.01.2020, 19:49

otra forma es poner patterns.txt y Strings.xml en una lista y encontrar filas únicas

cat patterns.txt Strings.xml | grep -oFf patterns.txt | sort | uniq -u

explicación:

cat patterns.txt Strings.xmlpone todo en una lista. grep -oFf patterns.txtelimina basura en cada línea. sortauto -explicativo. ordenar todas las líneas. uniq -uimprime solo líneas únicas.

0
27.01.2020, 19:49
for p in $(cat patterns.txt); do if ! grep $p strings.xml &>/dev/null; then echo $p; fi; done

es fácil de entender pero tiene el tiempo de inactividad de generar múltiples procesos grep, uno para cada línea en patterns.txt.

2
27.01.2020, 19:49

Теги

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