заменить текст с sed в Linux


0

У меня есть текст ниже в файле

path_tryuio=$path_opt/GMT/$CARGMT_VERSION

Я хочу заменить вышеуказанный текст на приведенный ниже текст, используя sed

$path_track/GMT/cayu/station/GMT/$CARGMT_VERSION

Где версия является переменной.

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


Есть $path_optи $path_trackпеременная, которая должна быть расширена?
РоманПерехрест

да, они определены в файле
сап

Попробуйтеsed -i 's/path_tryuio=$path_opt//GMT//$CARGMT_VERSION/path_tryuio=$path_track//GMT//cayu//station//GMT//$CARGMT_VERSION/g' *
Amit24x7

мы можем поместить строки в переменную и затем использовать ее в sed?
сок

Ответы:


0

Поскольку путь содержит косые черты, вы, вероятно, не хотите использовать общий /символ в качестве разделителя для sed. Здесь вместо использования /я использую ^:

$ echo $path_tryuio
/this/is/some_path
$ echo $path_tryuio | sed -e "s^/is^^"
/this/some_path

Также обратите внимание на использование двойных кавычек вместо одинарных кавычек - оболочка не раскрывает переменные внутри одинарных кавычек.


0

Предполагая, что вы хотели следующий модифицированный

        path_tryuio=$path_opt/GMT/$CARGMT_VERSION

а не то, что находится справа от того, =что обычно ожидается, вы можете добиться этого, используя sed:

sed -e 's|path_tryuio=$path_opt/\(GMT/$CARGMT_VERSION\)|$path_track/GMT/cayu/station/\1|'

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

$В $path_optне будет рассматриваться как конец шаблона, поскольку есть текст после него.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.