表达算术事物的方法有很多种:新的和旧的。但是,我想高效且良好地写出这一行
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 不是数字而是正则表达式,则可能需要转义某些字符。