1

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

4

3 回答 3

3

怎么样

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

在哪里

-f指定您希望 grep 匹配的单词文件

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

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

于 2013-03-18T16:55:22.120 回答
1

man grep说:

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

和这个:

-v, --invert-match 反转匹配的感觉,选择不匹配的行。(-v 由 POSIX 指定。)

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

于 2013-03-18T16:57:22.117 回答
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

$1在这种情况下是 bash 中的“参数号 1” wordsToExclude.txt,同样,$2textToProcess.txt

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

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

于 2013-03-18T16:58:34.067 回答