Linux 从命令行调用sed可以正常工作,但在脚本中失败
我一直在使用下面对Linux 从命令行调用sed可以正常工作,但在脚本中失败,linux,bash,sed,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: `"' 这是我写的脚本,它不起作用 #!/b
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的字符串并将其粘贴到命令行中,它就可以正常工作
有人知道为什么这个脚本失败了,但命令行调用仍然有效吗?引用很棘手。基本上,将双引号从分配给
$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
引用是很棘手的。基本上,将双引号从分配给
$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
只是为了扩展引号的使用:它们仅用于保护用于
sed
的字符不受shell的影响sed
不关心也从不看到外部引号。例如,echo foo | sed s/foo/bar/
按预期工作,因为sed
脚本中的任何内容都不需要受shell解释的影响。只需扩展引号的使用:它们仅用于保护用于sed
的字符不受shell的影响sed
不关心也从不看到外部引号。例如,echo foo | sed s/foo/bar/
按预期工作,因为sed
脚本中的任何内容都不需要受shell解释的保护。