在Solaris 10中使用sed更改文件的内容

时间:2010-05-23 16:11:07

标签: bash sed solaris

我有一个bash脚本,我想在文件中用jdk1.6.0_20更改jdk1.5.0_14的所有实例

我有以下代码:

#!/bin/bash
myvar="jdk1.6.0_20"
sed "s/jdk1.*/$myvar/g" answer_file.1 > answer_file.2

但是我在answer_file.1中有以下信息(粘贴相关部分):

JDKSelection.directory.JDK_LIST=/usr/jdk/jdk1.5.0_14 (v. 1.5.0_14 by Sun Microsystems Inc.)
JDKSelection.directory.HIDDEN_JDK=/usr/jdk/jdk1.5.0_14

上面的代码将jdk1.5.0_14的出现更改为jdk1.6.0_20,但也删除了第一行中的paranthesis中包含的信息。

所以在更改之后,我需要answer_file.2文件看起来像这样:

 JDKSelection.directory.JDK_LIST=/usr/jdk/jdk1.6.0_20 (v. 1.6.0_20 by Sun Microsystems Inc.)
 JDKSelection.directory.HIDDEN_JDK=/usr/jdk/jdk1.6.0_20

我怎样才能做到这一点?

感谢您的回答......

4 个答案:

答案 0 :(得分:2)

如果只是更改JDK版本,可以尝试以下命令

#!/bin/bash
myvar="1.6.0_20"
sed "s/1\.5\.0_14/$myvar/g" answer_file.1 > answer_file.2

答案 1 :(得分:1)

您的模式搜索“jdk1。*”,从而替换jdk1以及随后的所有内容。

您可能只希望匹配版本号,例如1\.5\.0_[0-9][0-9],并仅替换数字。

确保相应地引用模式,以便反斜杠不会丢失。

答案 2 :(得分:0)

这可能会有助于处理版本

myvar="1.6.0_20"

sed "s/\(\(jdk\)\{0,1\}\)[1-9]\.[0-9]\.0_[0-9][0-9]/\1$myvar/g" answer_file.1 > answer_file.2

已编辑:已添加myvar def

答案 3 :(得分:0)

您可以使用尾随空格锚定版本号:

sed "s/jdk1[^ ]* /$myvar /g" answer_file.1 > answer_file.2