У меня есть длинный список доменных имен, которые мне нужно удалить из / etc / remotedomains. Они, вероятно, не в каком-то определенном порядке в файле. Каждый домен находится в одной строке.
Как я могу перебрать список, найти эту строку в удаленных доменах и удалить ее.
источник
/etc/localdomains
и/etc/remotedomains
прежде чем делать такие вещи, как это.-F
предназначен для сопоставления с фиксированной строкой («точное совпадение»), но оно не заставляет шаблон соответствовать всей строке. POSIX указывает-x
флаг, ограничивающий совпадения для случаев, когда шаблон соответствует всей строке.Используйте комм!
Со страницы руководства:
Опции -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
Заметки:
Используйте -i.bak, чтобы sed сделал резервную копию domainlist.txt
Если в removelist.txt содержится много тысяч записей, это может привести к переполнению максимальной длины командной строки. Это не очень вероятный сценарий, но вы должны знать о нем.
При дальнейшем рассмотрении этот риск можно устранить с помощью:
источник