📌  相关文章
📜  sed 用另一个文件中的内容替换文件中的单词 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:20:03.543000             🧑  作者: Mango

sed 用另一个文件中的内容替换文件中的单词

在 Shell-Bash 环境下, sed 是一个非常强大的文本处理工具,它可以处理文件、管道、重定向等 IO 操作,常见的用途如替换、删除和插入等操作。

本文将介绍如何使用 sed 从另一个文件中读取内容,并将其用于在文件中替换单词。

1. 读取要替换的单词列表

首先我们需要准备一个文本文件,该文件包含我们想要替换的单词列表。比如我们可以把这个文件命名为 words.txt,里面写上以下内容:

cat
dog
bird

这里我们列出了三个单词,分别是 catdogbird

2. 用 sed 替换单词

假设我们有一个文件 original.txt,里面写着以下内容:

The quick brown fox jumps over the lazy dog.
The cat in the hat.
I have a bird in my hand.

我们现在想把这个文件中包含在 words.txt 的单词替换成另一个单词 REPLACED。我们可以使用以下的 sed 命令来实现:

sed "s/\<$(tr '\n' '|' < words.txt)\>REPLACED/g" original.txt

这个命令的含义:

  • sed 表示我们要用 sed 命令处理文本;
  • s 表示我们要进行替换操作;
  • \<\> 是正则表达式的特殊符号,表示单词的开始和结束;
  • $(tr '\n' '|' < words.txt) 是一个命令替换,它执行了一个 tr 命令,把 words.txt 中的每个单词用 | 连接起来,得到类似 cat|dog|bird 的字符串;
  • REPLACED 是我们想要替换成的新单词;
  • /g 表示替换所有匹配的单词。

执行上述命令后,文本的输出结果如下:

The quick brown fox jumps over the lazy REPLACED.
The REPLACED in the hat.
I have a REPLACED in my hand.

可以看到,原文本中的单词 catdogbird 都被替换成了 REPLACED

3. 保存替换后的文本

如果我们想把替换后的文本保存到一个新文件中,可以使用重定向符 >>>。其中 > 表示覆盖写入,而 >> 表示追加写入。

例如,我们可以把替换后的文本追加写入一个新文件 new.txt 中:

sed "s/\<$(tr '\n' '|' < words.txt)\>REPLACED/g" original.txt >> new.txt

执行后,新文件 new.txt 中的内容如下:

The quick brown fox jumps over the lazy REPLACED.
The REPLACED in the hat.
I have a REPLACED in my hand.
4. 总结

本文介绍了如何使用 sed 从另一个文件中读取内容,并将其用于在文件中替换单词。我们学习了如何:

  • 准备一个要替换的单词列表文件;
  • 使用 sed 命令进行替换操作;
  • 使用重定向符的方式保存替换后的文本。

这些知识可以帮助我们更加高效地处理文本文件,提高工作效率。