Intereting Posts
httpd не обслуживает относительный url от tomcat, почему бы и нет? RPM: ошибка jre-зависимостей, хотя эта версия JRE установлена Общий конфликт разделов NTFS, файлы, написанные под Debian Используйте определенный интерфейс для определенной подсети назначения (исходный IP-параметр) Ошибка, поскольку переменная среды $ DISPLAY неправильно установлена Как предотвратить двойное экранирование? Сценарий оболочки декодирования Url Удалить все строки в одном файле, НЕ совмещая ключевые слова в первом столбце Соединение ssh отказалось от того же ПК при выходе за пределы локальной сети Использование псевдонима zsh для быстрого клонирования репозитория git с именем пользовательской папки Печать в командной строке с использованием принтера Samba, требующего аутентификации Установка termName в Xresources не влияет Подсчет по первому столбцу, подсчет по второму столбцу и вывод группы по первому столбцу? Как получить доступ к http-серверу из сценария bash с существующим подключением tcp? Как я могу отобразить сообщение из ~ / .profile?

Как взять список и удалить его из файла?

У меня есть длинный список доменных имен, которые мне нужно удалить из / etc / remotedomains. Вероятно, они не находятся в определенном порядке в файле. Каждый домен находится в одной строке.

Как я могу перебирать список и находить эту строку в удаленных доменах и удалять ее.

grep -Fxf list -v /etc/remotedomains > remotedomains.new mv remotedomains.new /etc/remotedomains 

-v указывает grep только на выходные строки, которые не соответствуют шаблону.

В -f list grep читает шаблоны из list файлов.

-F сообщает grep интерпретировать шаблоны как простые строки, а не регулярные выражения (так что вы не столкнетесь с проблемами с метасимволами регулярных выражений).

-x указывает grep на соответствие всей строке, например, если есть шаблон foo который должен удалить только строку foo , а не строку foobar или barfoo .

Используйте comm!

 comm -23 /etc/remotedomains remove 

На странице руководства:

Сравните отсортированные файлы FILE1 и FILE2 по строкам.

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

Опции -1, -2 и -3 отключить соответствующие столбцы.

Тем не менее, требуется сортировка файлов.

sed -r -i -e '/^(domain1|domain2|domain3|...|domainN)$/d' domainlist.txt

Если список удаляемых доменов находится в файле, выполните следующие действия:

sed -r -i -e '/^'"$(xargs <removelist.txt|sed -e 's/ /|/g)"')$/d' domainlist.txt

Заметки:

  1. Использовать -i.bak, чтобы sed сделал резервную копию domainlist.txt

  2. Если файл removeelist.txt имеет много тысяч записей, он может переполнить максимальную длину командной строки. Это не очень вероятный сценарий, но вы должны знать об этом.

При дальнейших размышлениях этот риск можно устранить с помощью:

 for RE in $(xargs <removelist.txt|sed -e 's/ /|/g') ; \ do sed -r -i -e '/^('"$RE"')$/d' domainlist.txt ; \ done