Изменение содержимого файла с помощью sed в Solaris 10 - PullRequest
0 голосов
/ 23 мая 2010

У меня есть сценарий bash, в котором я хочу изменить все вхождения jdk1.5.0_14 с jdk1.6.0_20 в файле

У меня есть следующий фрагмент кода:

#!/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, но также удаляет информацию, содержащуюся в парантезе в первой строке.

Итак, после изменения мне нужен файл 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 ]

2 голосов
/ 23 мая 2010

Если дело только в изменении версии JDK, вы можете попробовать следующие команды

#!/bin/bash
myvar="1.6.0_20"
sed "s/1\.5\.0_14/$myvar/g" answer_file.1 > answer_file.2
1 голос
/ 23 мая 2010

Ваш шаблон ищет "jdk1. *" И, таким образом, заменяет jdk1 и все, что следует до конца строки.

Возможно, вы захотите совпадать только по номерам версий, например 1\.5\.0_[0-9][0-9],и заменяйте только цифры.

Обязательно указывайте шаблон соответствующим образом, чтобы обратные косые черты не потерялись.

0 голосов
/ 24 мая 2010

Вы можете привязать номер версии, используя завершающий пробел:

sed "s/jdk1[^ ]* /$myvar /g" answer_file.1 > answer_file.2
0 голосов
/ 23 мая 2010

Может быть, это поможет и с версией

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

...