我有一个文件template.jou
,其格式如下:
/codeline1
/codeline2
/var = var
/codeline3
现在我想用var
不同的值替换部分,例如A
,B
和C
,然后将替换后的值的内容写入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
输出重定向到另一个文件的原因。