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
Выражение 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
т. е.,примените замену ко всем строкам, соответствующим выражению, по отдельности.