0

我正在为 Windows 运行 GNU sed 4.2.1 实现,但没有使用 sed 的经验。

我有一个带有这种格式的行的 xml 文件:

<field level="document" name="Title" value="Pericles" />

需要将每一行转换为:

<entry key="cm:Title">Pericles</entry>

尝试了很多小时,但尽管引号问题已解决(quote-backslash-quote-quote),但大于字符 '>' 斜线,小于字符会导致问题。

'>' 应该被视为任何其他字符,对吗?但是不,这个实现似乎假设文件重定向。

尝试使用反斜杠、插入符号等,但尽管我快到了,但它失败了。

还注意到来自 Unix 的几个示例,在 Windows 中失败。Windows 是不同的实现还是与操作系统有关?

有人在 Windows 上使用过 sed 并且可以帮助我吗?

4

2 回答 2

1

xmlstarlet使用诸如etc之类的工具可以更轻松地解析 xml 。

也就是说,您可以使用 Unix 工具等来尝试此sed操作awk

GNU sed

sed -r '/^<field/s/.*name="([^"]+)".*value="([^"]+)".*/<entry key="cm:\1">\2<\/entry>/' file.txt

GNU awk

awk '/^<field/ { for (i=1; i<=NF; i++) { if ($i ~ /^name=/) { name = substr($i, 7) } if ($i ~ /^value=/) { value = substr($i, 8, length($i) - 8) } }  printf "<entry key=\"cm:%s>%s</entry>\n", name, value }' file.txt

结果:

<entry key="cm:Title">Pericles</entry>
于 2012-09-23T05:28:20.900 回答
1

我意识到这是一个旧帖子,可能会帮助寻找这个的人。使用双引号而不是单引号

sed -e "s/ text with > / /g" 使用 Cygwin sed 在 cmd.exe 中为我工作。

于 2016-03-21T16:44:15.397 回答