У меня есть файл с именем common.txt, который содержит список абсолютных путей. Например:
/etc
/etc/group
/var/log/syslog
У меня также есть набор файлов <hostname> .txt, которые также содержат список абсолютных путей. Вот пример (назовите его host1.txt):
/root/.bashrc
/var/log/syslog
/etc/hosts
/bin/true
/etc
/sbin/rtmon
/etc/group
Я хотел бы удалить все пути, которые появляются в common.txt, из каждого файла в наборе файлов <filename> .txt. Итак, приведенный выше пример файла host1.txt :
/root/.bashrc
/etc/hosts
/bin/true
/sbin/rtmon
Я написал следующий скрипт Bash для этого:
#!/bin/bash
set -o nounset
set -o errexit
set -o pipefail
while read -r ONE_PATH
do
for ONE_FILE in host1.txt host2.txt host3.txt
do
sed -i '\:'"$ONE_PATH"':d' "$ONE_FILE"
done
done < common.txt
Я испытываю трудности с получением правильной команды sed. То, что показано выше, приводит к тому, что все файлы оперируются, когда становятся пустыми.
Как я могу это исправить, чтобы достичь своей цели?