2015-02-24 104 views
0

我碰到在我们的传统庆典代码sed命令上的-itmp标志是做什么的?

sed -itmp <something> file.txt 

下面就因为我不明白清楚呢,我试着以下

这里是file.txt内容运行sed

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

感谢

回答

1

因为圆点您正则表达式不仅任何字符内字面点相匹配。所以我建议你逃避你的正则表达式中的点,以便它只匹配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 
+0

会介意给出一行'itmp'的标记吗? – 2015-02-24 01:28:37

+0

@brainstorm t是一个标签。但我不知道“m”和“p”是什么。我认为如果没有tmp参数,它会很好地工作。 – 2015-02-24 01:32:41

+0

'-i'调用就地编辑,保存对该文件所做的更改。 – 2015-02-24 01:37:01