Эд: можно ли заменить одну строку на другую?

openssl smime -sign -in index.xml -out index.cms -inkey./certs/Sign_Key.key -signer./certs/Sign_Key.crt

openssl smime -Verify -in index.cms -CAfile./certs/Sign _Key.crt -out index.csm.xml

openssl dgst -binary -sha256 index.xml | openssl base64

0
22.04.2020, 22:00
1 ответ

Выражение s/string.start/;/string.end/mynewline../не является допустимым выражением ed. Ни GNU ed, ни родной BSD edв моей системе его не понимают. Я также не могу заставить /string.start/;/string.end/dpработать. ;— это адрес, который совпадает с .,$, то есть «от этой строки до конца документа», и я не могу понять это в середине командной строки.

Самым простым решением было бы использовать только

s/string.start.*string.end/with my substituted string/p

Это буквально делает то, что вы хотите, то есть заменяет текст между первым совпадением string.startи последним совпадением string.end(, включая соответствующий текст )в текущей строке.

Это сродни желанию заменить строку в первой скобке в some.text(0) -> other.text(2)на100:

s/([^)]*)/(100)/

То есть вы сопоставляете начальный разделитель, за которым следует любой текст, а затем конечный разделитель и заменяете нужным текстом (. В этом случае разделители должны быть сохранены ).

Чтобы применить замену ко всем строкам в документе, добавьте к команде%(или альтернативно 1,$или просто,):

перед командой.
%s/string.start.*string.end/with my substituted string/p

Обратите внимание, что будет напечатана только последняя строка.

Чтобы напечатать все затронутые строки, используйте

g/string.start.*string.end/ s//with my substituted string/p

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

1
19.03.2021, 02:26

Теги

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