使用sed批量删除多个文件中的多行

时间:2012-01-04 21:55:32

标签: bash unix sed

假设我想在一堆文件中删除相同的行。我有一个简单的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

我做错了什么?我尝试在调用语句中添加更多关于变量或文件名的引号,但没有运气......

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您应该在实际的sed命令中使用双引号:

sed -i -e "${st},${en}d" $i

单引号内没有变量扩展。

它确实在回声中扩展的事实是因为你回音的字符串被双引号括起来。

事实上,如果这些只是你正在处理的数字,你甚至可以完全删除引号(sed -i -e ${st},${en}d)。