удалить текст из файла

удалить текст из файла

Я хочу удалить часть текста из file1.txt.

Я помещаю текст в файл tmpи делаю:

grep -f tmp file.txt

Но это дает мне только разницу.

Вопрос в том, как убрать разницу из file.txt.

решение1

Doing grep -f tmp file.txtотобразит все строки, содержащие слово text(предположим, tmpсодержит только слово text). Если вы хотите отобразить все строки, которые не содержат слово text, вам нужно использовать опцию -vинвертирования соответствия:

$ grep -v 'text' file.txt

Если вывести все строки в файле, но просто удалить все вхождения, то text:

$ sed 's/text//g' 

решение2

Если вы хотите удалить строки из вашего файла file.txt, содержащие строку, где textнаходится seed, то вы можете сделать что-то вроде:

sed '/text/d' file.txt

или

sed -n '/text/!p' file.txt

решение3

То, что вы хотите сделать, это

grep -Fvf tmp file.txt

От man grep:

   -f FILE, --file=FILE
          Obtain patterns from FILE, one per line.   The
          empty   file   contains   zero  patterns,  and
          therefore matches nothing.  (-f  is  specified
          by POSIX.)
   -F, --fixed-strings
          Interpret PATTERN as a list of fixed  strings,
          separated  by  newlines, any of which is to be
          matched.  (-F is specified by POSIX.)
   -v, --invert-match
          Invert  the  sense of matching, to select non-
          matching lines.  (-v is specified by POSIX.)

Итак, -fсообщает grep, что нужно прочитать список шаблонов, которые он будет искать, из файла. -Fнеобходимо, поэтому grepне интерпретирует эти шаблоны как регулярные выражения. Так, если задана строка типа foo.bar, то .будет воспринято как литерал ., а не как «соответствует любому символу». Наконец, -vинвертирует соответствие, поэтому grepвыведет только те строки, которые не соответствуют ни одному из шаблонов в tmp. Например:

$ cat pats 
aa
bb
cc
$ cat file.txt 
This line has aa
This one contains bb
This one contains none of the patterns
This one contains cc
$ grep -Fvf pats file.txt 
This one contains none of the patterns

решение4

Что я делаю:

sed '/text_to_delete/d' filename | sponge filename

Это внесет изменения в исходный файл.

Связанный контент