将一个文件作为输入,从其他文件中删除其内容

时间:2013-03-18 16:52:33

标签: bash

作为我编写的脚本的一部分,我需要将一个文件(单词列表)作为输入,并从其他输入文件中删除这些单词的所有实例。我该怎么办?也许使用

3 个答案:

答案 0 :(得分:3)

怎么样

$ grep -v -f words_to_exclude.txt input.txt

其中

-f指定您希望grep在

上匹配的单词文件

-v指定您希望grep输出匹配的内容

以上两个文件中每行需要一个单词。

答案 1 :(得分:1)

man grep 说:

  

-f FILE, - file = FILE                从FILE获取模式,每行一个。空文件包含零模式,因此不匹配任何内容。 (-f由POSIX指定。)

和此:

  

-v, - 反转匹配                 反转匹配感,选择不匹配的线条。 (-v由POSIX指定。)

所以,是的,使用grep将是一个好方法。至少如果要从输入文件中删除包含特殊单词的所有行。如果你只想删除单个单词,事情会变得更复杂。

答案 2 :(得分:0)

你可能正在寻找sed。示例脚本:

#! /usr/bin/bash
for word in $(cat $1); 
do
sed s/$word//g $2 > tmp;
mv tmp $2;
done;

假设您将其保存到script.sh中,您可以这样称呼它:

./script.sh wordsToExclude.txt textToProcess.txt
在这种情况下,{p> $1是bash中的“参数编号1”wordsToExclude.txt,类似地,$2textToProcess.txt

这样做是因为它没有替换$ word的每个实例,tmpfile只是作为sed写入的缓冲区,因此它不会在工作时破坏源。

sed命令中的g是“全局替换标志”。 sed的默认行为是仅替换行中搜索模式的第一个匹配项。 g标志告诉sed替换所有出现的而不仅仅是第一次出现。