SED는 어떻게 변수를 효율적으로 표현하나요?

SED는 어떻게 변수를 효율적으로 표현하나요?

산술적인 것을 표현하는 방법에는 새로운 것과 오래된 것 등 여러 가지가 있습니다. 하지만 나는 이 글을 효율적이고 잘 쓰고 싶다.

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

어느 출력

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

총 코드

#!/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

여기서 SED는 함수의 지역 변수에서 줄 번호를 가져옵니다. SED에 대한 변수를 효율적으로 표현하여 첫 번째 줄을 어떻게 표현할 수 있나요?

답변1

변수는 작은따옴표로 확장되지 않습니다. 큰따옴표를 사용하세요.

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

또한, 값 뒤에 END의 값이 아닌 문자가 오기를 원하므로 변수 이름이 끝나는 위치를 표시해야 합니다. 구문을 사용하여 변수 이름이 끝나는 위치를 명확하게 할 수 있습니다 .pENDp${END}

$START 또는 $END가 숫자가 아니라 정규식인 경우 일부 문자를 이스케이프해야 할 수도 있습니다.

관련 정보