从文件中删除文本


1

我想从中删除一些文字 file1.txt

我把文本放在文件中 tmp 并做:

grep -f tmp file.txt

但它只给我带来了不同。

问题是如何消除差异 file.txt


你可以做一个 sed 带有模式的命令脚本 tmp
Endoro

从您的问题中删除“使用sed或grep”或从标记中删除“awk”。

Answers:


7

grep -f tmp file.txt 将显示包含该工作的所有行 text (假设 tmp 只是工作 text )。如果要显示所有不包含单词文本的行,则需要使用 -v 反转匹配的选项:

$ grep -v 'text' file.txt

如果您打印文件中的所有行,但只删除所有出现的行 text 然后:

$ sed 's/text//g' 

tmp文件包含我要从file.txt中删除的文本。 (“文字”不是一个字)。 'grep -v -f tmp file.txt> file_result.txt'file_result.txt:不包含tmp文件中存在的文本
Ellouze Anis

grep使用行而不是单个单词。
iiSeymour

4

如果你想删除你的行 file.txt 其中包含行 text 是种子然后你可以做类似的事情:

sed '/text/d' file.txt

要么

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

2

你想做的是

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

0

我所做的是:

sed '/text_to_delete/d' filename | sponge filename

这将更改源文件。


1
不需要使用海绵,只需使用'-i': sed -i '/text_to_delete/d' filename
Woftor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.