【问题标题】:convert this linux statement into a statement which is supported by windows command prompt将此linux语句转换为windows命令提示符支持的语句
【发布时间】:2016-05-30 12:55:54
【问题描述】:

这是我的unix环境支持的说法

"cat document.xml | grep \'<w:t\' | sed \'s/<[^<]*>//g\' | grep -v \'^[[:space:]]*$\'"

但我想在 windows 命令提示符下执行该语句。 我怎么做?和 cat, grep,sed 类似的命令有哪些。

请告诉我类似于上述命令的窗口支持的确切代码

【问题讨论】:

    标签: linux windows unix sed command


    【解决方案1】:

    可以试试“powershell”吗?

    我认为是从Win8开始包含的, 在 W10 上肯定是。 我刚刚测试了一个“cat”命令,它可以工作。

    "grep" 不会,但可能会像这样适应: PowerShell equivalent to grep -fhttps://communary.wordpress.com/2014/11/10/grep-the-powershell-way/

    【讨论】:

    • 谢谢,但我在程序中使用该代码,所以我无法在 shell 中独立执行...
    【解决方案2】:

    Windows 上 grep 的等价物是 findstr,cat 的等价物是 type

    【讨论】:

    • 是的,我收到了这两个命令,但我无法获得“sed”的命令
    【解决方案3】:

    您问题中管道周围的双引号是语法错误,反斜杠单引号显然应该没有反斜杠,但我认为这只是一个稍微不精确的演示文稿。

    这是代码的作用。

    cat document.xml |
    

    这是一个useless use of cat,但它的目的是将此文件的内容提供给管道。

    grep '<w:t' |
    

    这会查找包含文字字符串 &lt;w:t 的行(可能是文件中 XML 格式的标记的开头)。单引号引用字符串,以便 shell 不会解释它(否则 &lt; 将被解释为重定向运算符);它们被 shell 消耗,而不是传递给grep

    sed 's/<[^<]*>//g' |
    

    这会将每对打开/关闭中断替换为空字符串。正则表达式[^&lt;]* 匹配零次或多次出现的字符,该字符可以是除&lt; 之外的任何字符。如果 XML 格式正确,它们应该总是成对出现,因此我们有效地删除了所有 XML 标记。

    grep -v '^[[:space:]]*$'
    

    这将删除任何空行或完全由空格组成的行。

    因为sedgrep 的超集,所以该程序可以很容易地改写为单个sed 脚本。对于您当前的问题,最简单的解决方案可能是为您的平台获取sed 的副本。

    sed -e '/<w:t/!d' -e 's/<[^<]*>//g' -e '/[^[:space]]/!d' document.xml
    

    我了解 Windows 上的报价规则可能会有所不同;尝试使用双引号而不是单引号,或者将脚本放在文件中并使用 sed -f file document.xml 其中 file 包含脚本本身,如下所示:

    /<w:t/!d
    s/<[^<]*>//g
    /[^[:space]]/!d
    

    无论如何,这是从 XML 文档中提取 CDATA 的一种相当粗略的方法;也许一些 XML 处理器将是正确的前进方式。例如。 xmlstarlet 似乎可用于 Windows。即使 XML 输入在同一行上没有开始和结束 &lt;w:t&gt; 标记,它也可以工作,没有其他内容。 (其实用面向行的工具解析XML就是一个massive antipattern。)

    【讨论】:

    • 非常感谢您的解释,但 sed 不是 windows 命令。那么我如何在 Windows 中做到这一点呢?
    • 我在 1998 年抛弃了 Windows,部分是因为这样的原因,所以如果您不想获得我建议的跨平台工具之一,我想我无法帮助您,除了建议您考虑采取同样的步骤来改善您的生活和理智之外。
    • 是的,但它显示了一个错误,比如 sed is not a known command
    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2019-07-03
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多