【问题标题】:GNU sed for windows handling special characters用于处理特殊字符的 Windows 的 GNU sed
【发布时间】:2016-03-22 00:44:15
【问题描述】:

我正在为 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 并且可以帮助我吗?

【问题讨论】:

  • 您声称“快到了”。那你为什么不具体说明你在哪里,以便有人可以帮助你完成最后(几个)步骤?

标签: windows sed character


【解决方案1】:

使用 xmlstarlet 等工具可以更轻松地解析 xml。

也就是说,您可以尝试使用 Unix 工具,例如 sedawk 等。

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>

【讨论】:

  • 我的评论好像不能正常显示。我运行 sed 命令并得到错误:sed: -e expression #1, char 1: unknown command: ''' 将单引号替换为双引号并得到错误:sed: -e expression #1, char 68: invalid reference \2 on 's' command's RHS
  • @chora:我不是 Windows 大师,但您可能需要考虑在类似 linux 的环境中运行 sed,例如 cygwin
  • 感谢史蒂夫,这可能很困难,因为该过程必须定期在无人​​看管的情况下运行。我想我必须查看 Windows Powershell 以寻找可能的解决方案。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多