Windows批处理文件和GNU Sed分组命令

时间:2013-04-28 08:27:03

标签: batch-file sed gnuwin32

我在批处理文件中使用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文档中找到任何内容。

2 个答案:

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