我想通过命令行在HTML文件上运行查找和替换。

我的命令看起来像这样:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html

当我运行它并在之后查看该文件时,它是空的。它删除了我文件的内容。

当我再次恢复文件后运行这个:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

stdout是文件的内容,并且已经执行了查找和替换。

为什么会这样?


当前回答

我正在寻找可以定义直线范围的选项,并找到了答案。例如,我想将host1从第36-57行更改为host2。

sed '36,57 s/host1/host2/g' myfile.txt > myfile1.txt

你也可以使用gi选项来忽略字符大小写。

sed '30,40 s/version/story/gi' myfile.txt > myfile1.txt

其他回答

您应该尝试使用-i选项进行就地编辑。

要更改多个文件(并将每个文件的备份保存为*.bak):

perl -p -i -e "s/\|/x/g" *  

将采取所有文件在目录和替换|与x 这就是所谓的“Perl饼”(简单如饼)

我正在寻找可以定义直线范围的选项,并找到了答案。例如,我想将host1从第36-57行更改为host2。

sed '36,57 s/host1/host2/g' myfile.txt > myfile1.txt

你也可以使用gi选项来忽略字符大小写。

sed '30,40 s/version/story/gi' myfile.txt > myfile1.txt

使用sed的-i选项,例如:

sed -i bak -e s/STRING_TO_REPLACE/REPLACE_WITH/g index.html

尽管对上面的正确答案表示尊重,但像那样“演练”脚本总是一个好主意,这样就不会破坏文件,而不得不从头开始。

让你的脚本将输出溢出到命令行,而不是写入文件,例如,像这样:

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

OR

less index.html | sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g 

通过这种方式,您可以查看和检查命令的输出,而不会截断文件。