Баш - найти ключевое слово в файле и удалить его строку [дубликат]
этот вопрос уже есть ответ здесь:
Я хотел бы дать ключевое слово, найти строку, где это ключевое слово aṕpears в файле и стереть всю строку.
это то, что я получил, но это не работает, как это следует:
KEYWORD='domain.com'
cat /etc/hosts | grep -v "$KEYWORD" > /etc/hosts
обновление
вот что сработало для меня:
sed -i_bak -e '/domain.com/d' /etc/hosts
однако, поскольку у меня было две строки с "domain.com" , есть ли способ сказать sed, чтобы стереть только строку, где точное ключевое слово "domain.com" кажется
это исходное содержимое /etc / hosts:
127.0.0.1 localhost localhost.localdomain
222.111.22.222 hvn.domain.com
222.111.22.222 domain.com
вот как это заканчивается после команды sed -i_bak -e '/domain.com/d' /etc/hosts
:
127.0.0.1 localhost localhost.localdomain
пробовал sed -i_bak -e '/<namourphoto.com.br>/d' ~/Desktop/hosts
но это не работа.
вывод
это код, который я придумал (на основе помощи, которую дали мне прекрасные люди):
D=domain.com
DOMAIN=`echo "$D" | sed 's/./\./g'`
sed -i_bak -e "/[t]$DOMAIN/d" /etc/hosts
внимание:
Я считаю, что всегда есть вкладка перед доменом, который нужно удалить
Я автоматически избегаю точек доменного имени.
3 ответов
использовать редактор потока, sed:
sed -i ".bak" '/culpa/d' test.txt
выше будут удалены строки, содержащие culpa в тесте.формат txt. Это создаст резервную копию оригинала (с именем test.формат txt.bak) и изменит исходный файл на месте.
передайте его в другой файл, а не тот, из которого Вы читаете, и будьте осторожны с бесполезным использованием cat
.
grep -v "$KEYWORD" /etc/hosts > newfile
помимо прекрасного ответа, данного относительно sed, вы также можете использовать Perl и немного улучшенное регулярное выражение для решения этого:
perl -pi.old -e 's/.*\sdomain\.com\s*\n//' file
обратите внимание, что я рассматриваю domain.com
будет изолирован пробелами (табуляциями или пробелами и т. д.), И после него до новой строки не будет отображаться ничего, кроме нуля или более пробелов. Аналогично -i
в sed,-i.old
в perl устанавливает $^I
переменная, и ваш исходный файл получит изменения, а копия будет храниться под старым именем и .old
прилагается.
Если вы хотите удалить только последнюю строку файла примера
sed -i '/[[:space:]]\+domain\.com/d' test.txt