我使用sed尝试了以下PowerShell脚本:
[array declarations]
Foreach ($var in $double)
{
$command = $command + " -e "
$command = $command + "s/$var/sMOS3double\[$var\]\[index\]/"
}
$command = $command + " mos3load_fun_09052012.c > poZamianie.txt"
**echo $command**
sed $command
不幸的是,它返回错误:
**./Renamer.ps1**
-e 's/vds/sMOS3double\[vds\]\[index\]/' -e 's/vbs/sMOS3double\[vbs\]\[index\]/' -e 's/vgs/sMOS3double\[vgs\]\[index\]/
' -e 's/vbd/sMOS3double\[vbd\]\[index\]/' -e 's/vgd/sMOS3double\[vgd\]\[index\]/' -e 's/vt/sMOS3double\[vt\]\[index\]/'
-e 's/EffectiveWidth/sMOS3double\[EffectiveWidth\]\[index\]/' -e 's/EffectiveLength/sMOS3double\[EffectiveLength\]\[in
dex\]/' -e 's/OxideCap/sMOS3double\[OxideCap\]\[index\]/' -e 's/Beta/sMOS3double\[Beta\]\[index\]/' -e 's/cdrain/sMOS3d
ouble\[cdrain\]\[index\]/' -e 's/vdsat/sMOS3double\[vdsat\]\[index\]/' -e 's/von/sMOS3double\[von\]\[index\]/' mos3load
_fun_09052012.c > poZamianie.txt
**sed.exe: -e expression #1, char 2: unknown command: `-'**
我努力尝试使用'','“或者根本没有分隔符的配置,但没有成功。
但是,然后我从PS控制台复制了回显输出并再次在控制台中作为参数传递:
**sed** -e s/vds/sMOS3double\[vds\]\[index\]
/ -e s/vbs/sMOS3double\[vbs\]\[index\]/ -e s/vgs/sMOS3double\[vgs\]\[index\]/ -e s/vbd/sMOS3double\[vbd\]\[index\]/ -e s
/vgd/sMOS3double\[vgd\]\[index\]/ -e s/vt/sMOS3double\[vt\]\[index\]/ -e s/EffectiveWidth/sMOS3double\[EffectiveWidth\]\
[index\]/ -e s/EffectiveLength/sMOS3double\[EffectiveLength\]\[index\]/ -e s/OxideCap/sMOS3double\[OxideCap\]\[inde\]/ -
e s/Beta/sMOS3double\[Beta\]\[index\]/ -e s/cdrain/sMOS3double\[cdrain\]\[index\]/ -e s/vdsat/sMOS3double\[vdsat\]\[inde
x\]/ -e s/von/sMOS3double\[von\]\[index\]/ mos3load_fun_09052012.c > poZamianie.txt
脚本正确执行。
任何人都可以解释这种行为吗?或者展示一种直接使用PowerShell执行该脚本的方法?
答案 0 :(得分:2)
写下这个:
s/vds/sMOS3double\[vds\]\[index\]/
s/vbs/sMOS3double\[vbs\]\[index\]/
s/vgs/sMOS3double\[vgs\]\[index\]/
s/vbd/sMOS3double\[vbd\]\[index\]/
s/vgd/sMOS3double\[vgd\]\[index\]/
s/vt/sMOS3double\[vt\]\[index\]/
s/EffectiveWidth/sMOS3double\[EffectiveWidth\]\[index\]/
s/EffectiveLength/sMOS3double\[EffectiveLength\]\[index\]/
s/OxideCap/sMOS3double\[OxideCap\]\[index\]/
s/Beta/sMOS3double\[Beta\]\[index\]/
s/cdrain/sMOS3double\[cdrain\]\[index\]/
s/vdsat/sMOS3double\[vdsat\]\[index\]/
到文件“有意义的名字。”,并将其称为
sed -f meaningful-name.sed mos3load_fun_09052012.c > poZamianie.txt
在sed-commands文件中,每行通常只有一个命令,不需要用'或'掩盖。
你甚至可以评论,afaik
#
# this style
#
使用sed -f commandfile.sed
调用它。
答案 1 :(得分:2)
invoke-expression "sed $command"
这对我有用。