我在批处理文件中使用GNU Sed for Windows。我想使用sed分组命令{}来分组一组命令。但是根据UNIX平台的文档,我们必须在新行中的{}内启动每个sed命令。可以在UNIX中完成,因为bash支持将命令跨越到> 1行。但是在Windows批处理文件中,我们如何将命令拆分为> 1行?我知道我可以将所有sed命令放在一个单独的脚本文件中,并使用'-f script-filename'调用sed。但我想限制为只有一个批处理文件,并希望使用'sed -e script'选项将所有内容放在批处理文件中。
如何在批处理文件中使用sed -e指定分组命令?
修改
例如,从此http://www.grymoire.com/Unix/Sed.html#uh-35:
#!/bin/sh
# This is a Bourne shell script that removes #-type comments
# between 'begin' and 'end' words.
sed -n '
/begin/,/end/ {
s/#.*//
s/[ ^I]*$//
/^$/ d
p
}
'
我们如何在批处理文件中执行相同的操作?我的意思是当他们将sed移植到Windows平台时,他们应该遇到这个问题并找出解决方法。除非,GNU人员认为批处理文件中不支持{},但我无法在GNU Sed文档中找到任何内容。
答案 0 :(得分:0)
您可以使用PowerShell执行此操作,但不能执行cmd.exe。
echo '
hello
world
'
结果
PS C:\Users\Steven> ./foo.ps1 hello world
答案 1 :(得分:0)
这适用于Windows下的GnuSed。
sed -f file.sed file.txt
这是file.sed
# sed script to convert +this+ to [i]this[/i]
:a
/+/{ x; # If "+" is found, switch hold and pattern space
/^ON/{ # If "ON" is in the (former) hold space, then ..
s///; # .. delete it
x; # .. switch hold space and pattern space back
s|+|[/i]|; # .. turn the next "+" into "[/i]"
ba; # .. jump back to label :a and start over
}
s/^/ON/; # Else, "ON" was not in the hold space; create it
x; # Switch hold space and pattern space
s|+|[i]|; # Turn the first "+" into "[i]"
ba; # Branch to label :a to find another pattern
}
#---end of script---