Как удалить строки файла (хосты), содержащие строку «adf.ly»?
Используя awk (благодаря тердону для сокращенной версии):
< inputfile awk '!/adf\.ly/' > outputfile
< inputfile: перенаправляет содержимое inputfile на awk stdin > outputfile : перенаправляет содержимое awk 'stdout на outputfile awk: < inputfile: перенаправляет содержимое inputfile ] awk stdin
Использование Perl (благодаря тердону для сокращенной версии):
< inputfile perl -ne '/adf\.ly/||print' > outputfile
-n: помещает цикл while (<>) {[...]} вокруг скрипта > outputfile: перенаправляет содержимое awk 's stdout на outputfile Повреждение команды Perl :
-n: помещает цикл while (<>) {[...]} вокруг скрипта adf\.ly: соответствует строке adf\.ly / останавливает шаблон ||: выполняет следующая команда, только если шаблон не соответствует строке print: печатает строкуНиже будут удалены строки, содержащие «adf.ly» в filename.txt:
sed -i '/adf\.ly/d' filename.txt
Используйте приведенную выше команду без -i, чтобы проверить ее перед удалением строк.
Здесь bash однострочный:
while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt
Переменная i будет содержать каждую строку, а итерация [[$i =~ .*adf\.ly.* ]] проверяет, имеет ли строка строку adf.ly, [ f7] отменяет проверку, поэтому [[ ! $i =~ .*adf\.ly.* ]] проверяет, не содержит ли строка adf.ly Если yes (&&), тогда строка будет напечатана. Чтобы сохранить вывод в другом файле (out.txt):
while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt >out.txt
Вы можете использовать стандартный текстовый редактор, ed:
printf '%s\n' 'g/adf\.ly/d' w q | ed file.txt
Вы можете использовать Vim в режиме Ex:
ex -sc 'g/adf\.ly/d' -cx hosts
g глобальный поиск d удалить x сохранить и закрыть