从命令行调用sed工作但脚本失败

时间:2012-09-14 19:57:33

标签: linux bash sed

我一直在使用以下调用sed删除行文件。

sed "/% Program:/,/mode: SPIKE/d" file.tt > file.tt.nh

我尝试编写一个bash脚本,允许我一次在许多文件上运行脚本。但sed失败。

sed "/% Program:/,/mode: SPIKE/d" file.tt > file.tt.nh
sed: -e expression #1, char 1: unknown command: `"'

这是我写的不起作用的剧本

#!/bin/bash
SEDARG='"/% Program:/,/mode: SPIKE/d"';
for F in *.tt
do
  OUT=$F'.nh';
  echo 'sed '$SEDARG' '$F' > '$OUT;
  sed $SEDARG $F > $OUT
done

让我感到困惑的是,如果我复制echo的字符串并将其粘贴到命令行中就可以了。

有谁知道为什么这个脚本失败但命令行调用有效?

1 个答案:

答案 0 :(得分:4)

报价很棘手。基本上,将双引号从指定的位置移至$SEDARG使用 $SEDARG的位置。

SEDARG='/% Program:/,/mode: SPIKE/d'
for F in *.tt
do
  OUT="$F.nh"
  echo "sed $SEDARG $F > $OUT"
  sed "$SEDARG" "$F" > "$OUT"
done