Как я удаляю строки файла, которые содержат определенную строку?

Как я удаляю строки файла (хосты), которые содержат строку "adf.ly"?

6
задан 16 June 2015 в 22:50

6 ответов

использование sed

Выполнение эта команда:

sed -i '/adf\.ly/d' inputfile 

man sed

   -i[SUFFIX], --in-place[=SUFFIX]
      edit files in place (makes backup if extension supplied)

Используя grep

спасибо за примечания @kos:

grep -v "ad\.fly" inputFile  > outputfile
13
ответ дан 23 November 2019 в 07:16

Следующее удалит строки, содержащие «adf.ly» в filename.txt на месте:

sed -i '/adf\.ly/d' filename.txt

Используйте вышеупомянутую команду без -i, чтобы проверить ее перед удалением строк.

3
ответ дан 23 November 2019 в 07:16

Вот bash однострочный:

while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt
  • Переменная i будет содержать каждую строку при повторении

  • [[$i =~ .*adf\.ly.* ]] проверяет, содержит ли строка строку adf.ly, ! отменяет проверку, поэтому [[ ! $i =~ .*adf\.ly.* ]] проверит, не содержит ли строка adf.ly

  • Если да (&&), тогда строка будет напечатана.

Чтобы сохранить вывод в другой файл (out.txt):

while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt >out.txt
1
ответ дан 23 November 2019 в 07:16

Вы могли использовать стандартный текстовый редактор, ed :

printf '%s\n' 'g/adf\.ly/d' w q | ed file.txt
1
ответ дан 23 November 2019 в 07:16

Можно использовать Vim в режиме Ex:

ex -sc 'g/adf\.ly/d' -cx hosts
  1. g глобальный поиск

  2. d удаляет

  3. x, сохраняют и закрываются

1
ответ дан 23 November 2019 в 07:16

Используя awk (благодаря terdon для сокращенной версии):

< inputfile awk '!/adf\.ly/' > outputfile
  • < inputfile: перенаправляет содержание inputfile кому: awk stdin
  • > outputfile: перенаправляет содержание awk stdout кому: outputfile

awk разбивка команды:

  • !/adf\.ly/: печатает запись, не соответствуя adf\.ly regex

Используя Perl (благодаря terdon для сокращенной версии):

< inputfile perl -ne '/adf\.ly/||print' > outputfile
  • -n: места a while (<>) {[...]} цикл вокруг сценария
  • -e: читает сценарий из аргументов

Разбивка команды Perl:

  • /: запускает шаблон
  • adf\.ly: соответствия adf\.ly строка
  • /останавливает шаблон
  • ||: выполняет следующую команду, только если шаблон не соответствовал строке
  • print: печатает строку
3
ответ дан 23 November 2019 в 07:16

Другие вопросы по тегам:

Похожие вопросы: