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

У меня есть файл, разделенный запятой. Я должен найти конкретный текст, а затем удалить полную строку.

например

123,aaa,bbb,888,8881 124,bbb,ccc,999,8881 125,ccc,ddd,888,8883 

Мне нужно удалить строку, содержащую 888.

3 Solutions collect form web for “Как удалить строку из файла, когда строка содержит определенную строку?”

Используя sed ,

 sed '/888/d' filename 

Вы можете использовать опцию -i для редактирования файла на месте, например,

 sed -i.bak '/888/d' filename 

Примечание: .bak будет сохранять резервную копию исходного файла.


Предполагая, что вы хотите избавиться от строк, которые содержат 888 по определенному столбцу, тогда вы хотели бы использовать,

 awk -F"," '$4 != "888"' filename 

Использование grep

 grep -vw '888' infile.csv > outfile.csv 

Если вы хотите редактировать inplace,

 sed -i.bak '/\b888\b/d' infile.csv 

Редактировать:

Чтобы удалить строки, содержащие 888 только в 4-м столбце

 sed -i.bak -r '/^(([^,]+,){3})888,/d' infile.csv 

ИМО, используя команды printf для соединения в ed , лучше, чем sed -i .

 printf '%s\n' 'g/,888,/d' 'w' | ed -s msalik.txt 

Первый arg to printf сообщает ему распечатать каждый оставшийся аргумент, разделенный символами новой строки ( \n ).

Ни один из последних двух аргументов не нуждается в цитировании. Я просто привел их в качестве примера – некоторые команды ed нужно будет процитировать.


Почему лучше, чем sed -i ?

В отличие от ed , sed -i не выполняет правдивое редактирование на месте. Он создает временный выходной файл и затем переименовывает его поверх оригинала. У этого есть два потенциально нежелательных побочных эффекта:

  • Разрешения на файл могут измениться из-за umask с которым был создан файл temp. Даже право собственности или группа могут измениться, если сценарий sed -i запускается другим пользователем (у которого, конечно же, есть соответствующий RW-доступ к файлу и директории).

  • Файл замены будет иметь другой индекс. Это сломает жесткие ссылки.

  • Почему двойные амперсанды и скопированные условия повторяются вместе вместе с последним?
  • Добавить строку текста в раздел файла правил
  • Как проверить shellshock против удаленной машины, используя простой скрипт
  • Проверьте, содержит ли переменная оболочки абсолютный путь
  • Команда, которая принимает один числовой аргумент и выводит день недели по формуле
  • Ввод папки с пробелами и escape-символами с использованием bash
  • Переменная окружения для ip-адреса
  • Почему параметр $ 0 дает мне только базовое имя вместо полного пути после преобразования x-shellscript в x-исполняемый?
  • Сортировка вывода ls, где файлы заканчиваются цифрами
  • Как классифицировать эти строки в этом файле ASCII
  • Shell, howto извлекает буквы из строки $ line1 = «Проверьте это ... проверьте это!» И напечатайте по одному
  • Как создать цикл for с переменным числом итераций?
  • Linux и Unix - лучшая ОС в мире.