0

我在批处理文件中使用 GNU Sed for Windows。我想使用 sed 分组命令 {} 对一组命令进行分组。但是根据 UNIX 平台的文档,我们必须在 {} 中以新行开始每个 sed 命令。这可以在 UNIX 中完成,因为 bash 支持将命令扩展到 >1 行。但是在 Windows 批处理文件中,我们如何将命令拆分为 >1 行?我知道我可以将所有 sed 命令放在一个单独的脚本文件中,并使用“-f script-filename”调用 sed。但我想限制为只有 1 个批处理文件,并希望通过使用“sed -e 脚本”选项将所有内容放在批处理文件中。

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

4

2 回答 2

0

您可以使用 PowerShell 执行此操作,但不能使用 cmd.exe。

echo '
hello
world
'

结果

PS C:\Users\Steven> ./foo.ps1

你好
世界
于 2013-04-28T08:52:53.440 回答
0

这适用于 Windows 下的 GnuSed。

sed -f 文件.sed 文件.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---
于 2013-04-28T11:25:11.503 回答