sed 命令上的 -itmp 标志有什么作用?

what does -itmp flag on sed command do?

我在遗留 bash 代码中遇到了以下内容

sed -itmp <something> file.txt

由于没弄清楚它是干什么的,试了下面的

这里是运行宁sed

之前file.txt的内容
dummy={my.java.home}
dummy={my_java_home}

我现在运行

sed -itmp "s#{my.java.home}#${JAVA_HOME}#g" file.txt

在我运行这个之后,我得到以下

dummy=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
dummy=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home

我可以看到 sed 是如何替换的。但是我无法理解 sed 替换了原始文件中的 my_java_homemy.java.home,尽管我在上面发出 sed 命令时要求它仅更改 my.java.home

谢谢

因为正则表达式中的点匹配任何字符,而不仅仅是文字点。所以我建议你转义正则表达式中的点,这样它只匹配 my.java.home 字符串。

sed -itmp "s#{my\.java\.home}#${JAVA_HOME}#g" file.txt

而且您实际上不需要 tmp 参数。

sed -i "s#{my\.java\.home}#${JAVA_HOME}#g" file.txt