Unix查找并替换多个字符为字符串。

4

我想用单词替换文件中所有特定字符的出现次数。我的问题是,我是否可以使用单个命令来替换所有字符。我正在使用以下命令将每个 'a' 的出现次数替换为 'apples'

sed 's/a/apple/g' sample.txt 

我不想写3或4个类似的命令来替换每个'b'、'c'、'd'的出现,有没有办法扩展上述命令以适应我的需求,还是我需要使用同样的三个命令?


当你开始替换 e 字符时要小心,因为它也会影响到 apple 中的 e。你可能需要研究一下 sed 的正则表达式功能,特别是 "单词边界" 字符。 - Intermernet
@Intermernet你认为我应该怎么做?我还注意到使用我提到的命令,终端会输出替换后的内容,但文件内容并没有被修改。 - noobcoder
请查看 sed -i。它应该允许原地修改,但有时很危险!先复制文件! - Intermernet
1个回答

3
您可以使用sed命令中的-e选项来输入多个命令,如下所示:
sed -i.bak -e 's/a/apple/g' -e 's/b/bat/g' -e 's/c/cat/g'

这听起来不错。但它实际上是否修改了文件的内容,还是只在终端上显示?对我来说,使用 sed 命令只会在终端上显示更改,但当我打开文件时,看到的是旧的未修改的内容。 - noobcoder
我已经添加了“-i.bak”标志以启用内联编辑,这将保存更改在文件本身中。 - anubhava
这个完美地运行了。然而,.bak 文件是用作备份文件吗?如果是的话,它什么时候实际上有用呢?我不能简单地使用 sed -i -e 's/a/apple/g' 等命令吗? - noobcoder
".bak" 保留了文件的原始内容,这是为了安全起见,如果出现任何问题,您可以获取原始文件。 - anubhava
我明白了。现在我懂得这个逻辑了。 - noobcoder
我立即这样做了,但它要求我等待5分钟。 - noobcoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接