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_home
和 my.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
我在遗留 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_home
和 my.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