Удалить строки из одного файла, если они содержат регулярное выражение содержимого в другом файле

Выберите вариант UEFI, только если вы точно знаете, что делаете . Поэтому выберите вариант без UEFI, выберите вариант Запустить Manjaro Linux , затем следуйте инструкциям ниже.

Выберите запись Live CD в меню загрузки, нажмите E на клавиатуре и замените quiet splash на nomodeset . Если вы не нашли тихую заставку , просто найдите вторую последнюю строку и поместите nomodeset после ro .

1
29.06.2017, 22:07
3 ответа

Чтобы зациклить весь FileB, вы можете использовать такой подход, как:

for i in `cat FileB`
do
<do your work>
done

Но, возможно, будет лучше фильтровать еще и по CNAME

0
27.01.2020, 23:45

Вы можете использовать флаг -fдля поиска всех строк в FileB:

grep -v -f FileB FileA

Это почти то, что вы хотите. Но это также удаляет строки, в которых шаблоны из FileBявляются , а не в конце, и вы явно указали, что они должны совпадать только тогда, когда они находятся в конце. Поэтому нам нужно соответствующим образом изменить FileB. Мы можем использовать sed, чтобы добавить regexдля конца строки, который является знаком $:

sed 's/$/$/' FileB

Это выглядит так, как будто ничего не заменяется, но на самом деле это добавление $в каждый конец строки.

Теперь мы можем использовать подстановку процессов, чтобы объединить все это:

grep -v -f <(sed 's/$/$/' FileB) FileA
2
27.01.2020, 23:45

С помощью sedвы можете сделать это следующим образом:

sed -n '/^[^ ]*$/{H;d;};G;/ \(.*\)\n.*\n\1/d;P' fileB fileA

Это :Первый файл процесса B. Если строки не содержат пробелов, предполагается, что они являются именами хостов в файле B, и мы добавляем их в пробел и продолжаем({H;d;})

Предполагается, что все остальные строки относятся к файлу A. Добавляя пробел к списку имен хостов (G), все строки с последним словом строки, которые повторяются в списке имен хостов, могут быть удалены. Остальные строки печатаются без завершающего списка (P). Опция -nподавляет вывод по умолчанию.

Редактировать:На самом деле нужно делать

sed -n '/^[^ ]*$/{H;d;};G;/ \(.*\)\n.*\n\1\n/d;/ \(.*\)\n.*\n\1$/d;P' fileB fileA

, чтобы избежать особых случаев.

0
27.01.2020, 23:45

Теги

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