使用sed在文件中替换单词。

15 浏览
0 Comments

使用sed在文件中替换单词。

我尝试学习Unix和如何使用终端。我使用的是Mac电脑。

我打开终端,进入一个文件夹。在文件夹里有一个名为fruit.txt的文件。在这个文件里只有两个词,梨和苹果。

我想把文件fruit.txt中的梨替换为芒果。

sed 's/pear/mango/' fruit.txt

终端给出了如下结果:

mango, apple

但是当我打开文件时,什么都没有改变。我漏掉了什么?

0
0 Comments

Sed是一种流编辑器,它读取数据,对数据进行修改,并将结果发送到输出。它不会自动替换文件的内容。如果想要替换文件的内容,可以使用sed -i或sed --in-place命令。另外,还可以将输出结果重定向到一个新文件,这样更安全,即使出现错误,也还能保留原始文件。

在给出的例子中,sed -i 's/pear/mango/' fruit.txt命令出现了错误sed:1:"fruit.txt":invalid command code f。尝试将结果输出到新文件的sed -i 's/pear/mango/' fruit.txt > newfruit.txt命令也出现了相同的错误。

可能是由于sed的版本问题导致的。可以使用sed --version命令查看sed的版本。根据OP的说法,他们使用的是Mac操作系统,所以可能是BSD sed,需要使用-i.bak或类似的命令。

有人问如何知道sed的版本,尝试在终端中输入sed --version命令,但没有得到结果。在Mac中似乎无法知道sed的版本,可以参考stackoverflow.com上的这个链接:stackoverflow.com/questions/37639496

另外,也有人提供了一个有效的解决方法:sed 's/oldword/newword/' file1.txt > file2.txt。这个方法在stackoverflow.com上有解释:stackoverflow.com/questions/7573368。

0