sed заменить одну строку на часть следующей строки

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

        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не будет рассматриваться как конец пространства шаблона, так как после него есть текст.

0
01.09.2019, 06:12
2 ответа
$ 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.
3
28.01.2020, 02:14

Используя 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.
3
28.01.2020, 02:14

Теги

Похожие вопросы