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后跟字符p,而不是 的值ENDp,因此您需要指示变量名称的结束位置。您可以使用${END}语法来明确变量名称的结尾位置。

请注意,如果 $START 或 $END 不是数字而是正则表达式,则可能需要转义某些字符。

相关内容