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

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

например

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

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

  • Как получить значение именованного параметра уже запущенного процесса в Linux?
  • Bash при поиске цикла и замене с помощью sed
  • Выход Grep Wvdial во время работы
  • В сценарии bash, используя условное выражение «или» в выражении «if»
  • Найти имена репозиториев из гитолитного информационного вывода
  • Хотите напечатать формат таблицы с несколькими строками в командной строке
  • Печать последнего символа в указанном пути
  • SSH на нескольких серверах и сохранение вывода нескольких команд в файле на локальном сервере
  • 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-доступ к файлу и директории).

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

    Linux и Unix - лучшая ОС в мире.