假设我想在一堆文件中删除相同的行。我有一个简单的bash脚本,如下所示:
st=$1
en=$2
shift 2
for i in $*; do
echo "sed -i -e '${st},${en}d' $i"
sed -i -e '${st},${en}d' $i
done
我称之为:
[03:18] ./cleanup.sh 2731 3009 trace_X+0.01080_Y+0.00309_Z-0.00000.dat
我得到了
sed -i -e '2731,3009d' trace_X+0.01080_Y+0.00309_Z-0.00000.dat
sed: -e expression #1, char 12: unterminated `s' command
我做错了什么?我尝试在调用语句中添加更多关于变量或文件名的引号,但没有运气......
感谢您的帮助!
答案 0 :(得分:3)
您应该在实际的sed
命令中使用双引号:
sed -i -e "${st},${en}d" $i
单引号内没有变量扩展。
它确实在回声中扩展的事实是因为你回音的字符串被双引号括起来。
事实上,如果这些只是你正在处理的数字,你甚至可以完全删除引号(sed -i -e ${st},${en}d
)。