Como expressar variáveis de maneira eficiente para o SED?

0

Existem muitas maneiras de expressar as coisas aritméticas: maneiras novas e antigas. No entanto, eu gostaria de escrever esta linha de forma eficiente e bem

sed -n '$START,$ENDp;$ENDq' < data.tex

qual saída

sed: 1: "$START,$ENDp;$ENDq": invalid command code S

Código total

#!/bin/bash
function getStart {
        local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
        echo $START
}

function getEnd {
        local END="$(awk '/end\{document\}/{ print NR; exit }' data.tex)"
        echo $END
}

START=$(getStart)
(( START-- ))
echo $START

END=$(getEnd)
(( END++ ))
echo $END

sed -n '$START,$ENDp;$ENDq' < data.tex

onde o SED está obtendo os linenumbers de variáveis locais de funções. Como você pode expressar a primeira linha expressando as variáveis de maneira eficiente para o SED?

    
por Léo Léopold Hertz 준영 11.09.2015 / 15:19

1 resposta

4

As variáveis não são expandidas entre aspas simples. Use aspas duplas:

sed -n "$START,${END}p;${END}q" < data.tex

Além disso, como você deseja o valor de END seguido do caractere p , e não o valor de ENDp , é necessário indicar onde o nome da variável termina. Você pode usar a sintaxe ${END} , que explicita onde o nome da variável termina.

Observe que, se $ START ou $ END não forem números, mas expressões regulares, talvez seja necessário evitar alguns caracteres.

    
por 11.09.2015 / 15:22

Tags