Você precisa usar o tipo certo de citações. Os parênteses têm um significado especial em muitos shells, e as variáveis do shell não funcionam dentro de aspas simples. Além disso, se a sua substituição contiver /
ou $
, a sintaxe Perl estará errada e a substituição falhará.
Você pode usar o seguinte script:
perl -i -pe 'BEGIN { undef $/; } s/^## Exercise 1.*^## Points.*?^/'cat schema.md'/sme' P.md
Explicações:
-
BEGIN { undef $/; }
faz o Perl ler o arquivo inteiro de uma só vez. -
s/A/B/sme
encontra A em várias linhas, manipula referências anteriores em B, avalia o novo B e usa o resultado como substituto. -
^## Exercise 1.*^## Points.*?^
corresponderá a um intervalo de uma linha que começa com## Exercise 1
até uma linha que começa com## Points
e, em seguida, até a próxima linha começar. -
'cat schema.md'
significa que quando uma correspondência for encontrada, o Perl executarácat schema.md
como um comando shell. Assim, o novo texto será o conteúdo de schema.md.