Como apagar o texto da variável depois de combinar algum padrão?

0

Desejo excluir algum texto antes de algum padrão. Por exemplo:

VAR="This is a test script text and real script text."
PATTERN="test "

E a saída desejada que eu quero é:

NEW_VAR="script text and real script text."
    
por JefferyLR 18.10.2018 / 05:31

2 respostas

1

Se você estiver usando um shell que suporte expansões de parâmetro do tipo ${WORD##*STR} , tudo o que você precisa fazer é abaixo.

printf '%s\n' "${VAR##*$PATTERN}"

Para armazená-lo na nova variável, use o truque de substituição de comando com $(..) ou use o recurso inerente de printf para armazenar a string formatada em uma nova variável

printf -v NEW_VAR '%s' "${VAR##*$PATTERN}"
printf '%s\n' "$NEW_VAR"

Usar o shell para fazer a substituição é um pouco efetivo que bifurca um utilitário externo como sed ou awk .

Citações de Wiki de Hackers de Expansão de Parâmetros

${PARAMETER##PATTERN}

This form is to remove the described pattern trying to match it from the beginning of the string. The operator ## will try to remove the longest text matching.

    
por 18.10.2018 / 05:34
0

Não é necessário printf - atribua nova variável usando "expansão de parâmetro:

NEW=${VAR#*$PATTERN}
echo $NEW
script text and real script text.
    
por 18.10.2018 / 11:26