Digamos que eu queira obter o texto entre a primeira correspondência de "start_" e a primeira de "_end", não importa se está na mesma ou em várias linhas. Não inclua as partidas.
Texto de exemplo 1:
This is a start_text with start_and some_end text with_end
fora do texto 1:
text with start_and some
Texto de exemplo 2:
This is a
start_text with
start_and some_end
text with_end
texto 2:
text with
start_and some
Já vi muitas respostas, mas elas são focadas em linhas e não em arquivos. Qualquer tipo de ferramenta ou comando serve, desde que seja baseado em console.
Com
perl
:perl -n
é osed -n
modo em que a expressão fornecidae
é executada para cada linha da entrada, como emsed
.-l
é para que um novol
ine seja automaticamente anexado aoprint
ing¹-<octal-number>
define o separador de registros como o byte com o valor fornecido em vez de nova linha.0777
(511) ou qualquer coisa acima de 0377 (255) é um valor de byte que não pode existir, portanto, haverá um único registro: o arquivo inteiro.*?
like*
corresponde a 0 ou mais do átomo anterior (aqui,.
que corresponde a qualquer caractere único), mas enquanto*
corresponde ao maior número possível,*?
corresponde ao menor número possível, de modo que.*?
será executado até a primeira ocorrência de_end
, não a última.s
sinalizador para o/regexp/
operador de correspondência de padrões é necessário para.
corresponder também aos caracteres de nova linha, o que não acontece por padrão.Você também deve poder usar
pcregrep
, mas acho (com a versão 8.39 2016-06-14 do Debian) que ele fornece:O que não consigo explicar.
pcre2grep
(versão 10.42 2022-12-11) está OK:¹ Tecnicamente, isso faz com que o separador de registros seja removido da entrada antes de armazená-lo
$_
e o separador de registros de saída ($\
) seja definido como o mesmo que o separador de registros de entrada ($/
) que naquele ponto ainda é uma nova linha, por isso é importante que isso-l
venha antes do-0...
. Cuidado, pois-l<octal>
define o separador de registro de saída para o valor de byte fornecido, portanto, é diferente de-l -<octal>
.