找到并替换为sed

时间:2012-06-22 13:43:52

标签: bash replace sed find

我有以下问题。

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

我不知道我要删除的字数(太多了!)所以我不知道如何使用以下sed命令

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

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

$ cat filewithwordstobedeleted.txt

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

谢谢你的帮助! :)

的Fabio

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

如果您的单词列表是一行一行而不是非常长:

sed -ri "s/$(tr "\n" "|" < filewithwordstobedeleted.txt | head -c-1)/null/g" /home/user/test.txt

答案 2 :(得分: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