Предполагая, что вы хотите изменить следующее
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
не будет рассматриваться как конец пространства шаблона, так как после него есть текст.
$ awk '/^\*/ {secret=$0;next}; {gsub(/<secret>/,secret,$0); print}' input.txt
This is a *123456789
Other stuff here.
This is a *987654321
Other stuff here.
Если вы хотите удалить начальный *
из «секрета», вы можете использовать функцию awk substr()
:
$ awk '/^\*/ {secret=substr($0,2);next}; {gsub(/<secret>/,secret,$0); print}' input.txt
This is a 123456789
Other stuff here.
This is a 987654321
Other stuff here.
Используя sed, вы можете вытащить следующую строку, используя N
, а затем повторно -упорядочить части с помощью s
. Например:
$ sed -E '/^\*[0-9]{1,}$/{N;s/(.*)\n(.*)<secret>/\2\1/}' file
This is a *123456789
Other stuff here.
This is a *987654321
Other stuff here.