3

我有以下问题。

我有一个包含很多单词的文件,我要做的就是在另一个文件中找到这些单词,然后用一个字母替换它们。

我不知道我必须删除的单词(太多了!)所以我不知道如何使用以下 sed 命令

$ sed -i 's/words_old/word_new/g' /home/user/test.txt

但是我认为我还必须使用 cat 命令:

$ cat filewithwordstobedeleted.txt

但我不知道如何将它们结合起来。

感谢你们对我的帮助!:)

法比奥

4

3 回答 3

3

假设您每行有一个要删除的单词,那么一个简单的 shell 循环可以帮助您:

cat filewithwordstobedeleted.txt | while read word; do
    sed -i "s/$word/null/g" /home/user/test.txt
done

请注意,使用cat并不是绝对必要的,但可以使此示例更易于阅读。

于 2012-06-22T13:54:37.983 回答
0

如果您的单词列表是每行一个并且不是很长:

sed -ri "s/$(tr "\n" "|" < filewithwordstobedeleted.txt | head -c-1)/null/g" /home/user/test.txt
于 2012-06-22T14:58:39.670 回答
0

这可能对您有用(GNU sed):

# cat <<\! >/tmp/a
> this
> that
> those
> !
cat <<\! >/tmp/b
> a
> those
> b
> this
> c
> that
> d
> !
sed 's|.*|s/&/null/g|' /tmp/a
s/this/null/g
s/that/null/g
s/those/null/g
sed 's|.*|s/&/null/g|' /tmp/a | sed -f - /tmp/b
a
null
b
null
c
null
d
cat <<\! >/tmp/c
> a
> this and that and those
> b
> this and that
> c
> those
> !
sed 's|.*|s/&/null/g|' /tmp/a | sed -f - /tmp/c
a
null and null and null
b
null and null
c
null
于 2012-06-22T17:42:10.440 回答