PowerShell与sed的复杂参数

时间:2012-05-09 18:57:02

标签: powershell sed

我使用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执行该脚本的方法?

2 个答案:

答案 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"

这对我有用。