Используйте sed для замены сложной строки, используя переменную окружения - PullRequest
0 голосов
/ 26 октября 2018

У меня есть файл: foo

В файле есть строка:

JVMDATA="$(${TIMEOUT} sudo /usr/lib/jvm/jdk1.8.0_92/bin/java -jar ${JVMINSPECTOR} ${PID} 2>&1)"

Я хочу заменить /usr/lib/jvm/jdk1.8.0_92/bin/javaс:

JAVA_HOME/bin/java 

Как мне это сделать?

1 Ответ

0 голосов
/ 26 октября 2018

Один из способов сделать это может быть следующим:

sed -e 's|/usr/lib/jvm/jdk1.8.0_92/bin/java|JAVA_HOME/bin/java|'  original.txt  > new.txt
cp original.txt original.txt.sav
mv new.txt original.txt

Используется подстановка шаблона sed s / old / new /.Обычно это косая черта, потому что вам нужно избегать их.В моей системе sed допускает использование вертикальных разделителей шаблонов, что делает его более читаемым.Я подозреваю, что вы захотите изменить его на $ JAVA_HOME ... (обратите внимание на ведущий знак доллара).

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

sed -e 's/\/usr\/lib\/jvm\/jdk1.8.0_92\/bin\/java/JAVA_HOME\/bin\/java/' original.txt > new.txt
...