Estou procurando uma sed
solução como esta aqui: Imprimir tudo após o enésimo delimitador
sed -E 's/^([^\]*[\]){3}//' infile
mas para extrair o texto antes do enésimo delimitador, em vez do enésimo delimitador como no exemplo. Algo que funciona com todas as variantes do sed. E opere em todas as linhas como no exemplo.
O delimitador neste exemplo é \
mas poderia ser para qualquer outro. Deve funcionar com qualquer versão do sed.
Por que você não usa
cut
?Com
sed
, em vez de excluir a correspondência, capture-a e use uma referência anterior para substituir a linha inteira pelo grupo capturado:Embora isso também imprima a barra invertida final... Para evitar que você possa executar
Usando
awk
:Para manter o n- ésimo delimitador, o seguinte comando pode ser usado.
Você pode substituir o enésimo delimitador por uma nova linha (que de outra forma não pode ocorrer no espaço padrão) e, em seguida, excluir tudo que começa com essa nova linha. Aqui para n == 3:
Ou se o n -ésimo delimitador deve ser retido na saída:
Para pular as linhas que não possuem n delimitadores:
um awk mais curto: