从终端查找并替换,并将替换的值写入新文件

从终端查找并替换,并将替换的值写入新文件

我有一个文件template.jou,其格式如下:

/codeline1
/codeline2
/var = var
/codeline3

现在我想用var不同的值替换部分,例如ABC,然后将替换后的值的内容写入template.jou新文件。

我尝试了以下操作:

sed -n 's/var/A/gpw A.jou' template.jou

但这只会将模式匹配的行(即/var = A)打印到新文件中,A.jou而我想要的完整文件如下:

/codeline1
/codeline2
/var = A
/codeline3

我也尝试过:

sed -i '.bak' 's/var/A/g' template.jou

这用新内容替换了 template.jou 文件,但我希望它也更改文件名,以便新文件被称为A.jou

答案1

您可能只是想将输出重定向sed到另一个文件:

sed 's/= var/= A/g' template.jou > A.jou

确保仅替换分配,例如= var仅通过匹配。


's/var/A/gp请注意不是实现你想要的,因为var将被全局替换,并且替换将再次打印。你会得到这个输出:

/codeline1
/codeline2
/A = A
/A = A
/codeline3

此外,w修改器只会将修改的部分打印到其后指定的文件中,这意味着您的文件A.jou将只包含修改部分/var = A,而不会包含其他内容。这就是为什么您应该将整个sed输出重定向到另一个文件的原因。

相关内容