作为我编写的脚本的一部分,我需要将一个文件(单词列表)作为输入,并从其他输入文件中删除这些单词的所有实例。我该怎么办?也许使用grep?
答案 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)
#! /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
,类似地,$2
是textToProcess.txt
这样做是因为它没有替换$ word的每个实例,tmpfile只是作为sed写入的缓冲区,因此它不会在工作时破坏源。
sed命令中的g
是“全局替换标志”。 sed的默认行为是仅替换行中搜索模式的第一个匹配项。 g
标志告诉sed替换所有出现的而不仅仅是第一次出现。