作为我正在编写的脚本的一部分,我需要将一个文件(单词列表)作为输入,并从另一个输入文件中删除这些单词的所有实例。我该怎么做这样的事情?也许使用grep?
问问题
89 次
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
,同样,$2
是textToProcess.txt
这样做的作用是它用任何内容替换 $word 的每个实例,tmpfile 只是作为 sed 写入的缓冲区,因此它不会在工作时破坏源。
sed 命令中的g
是“全局替换标志”。sed 的默认行为是仅替换一行中第一次出现的搜索模式。该g
标志告诉 sed 替换所有出现的事件,而不仅仅是第一个。
于 2013-03-18T16:58:34.067 回答