我有一个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
我怎样才能做到这一点?
感谢您的回答......
答案 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