gpt4 book ai didi

windows - grep 在 Windows 批处理文件中

转载 作者:可可西里 更新时间:2023-11-01 09:55:12 26 4
gpt4 key购买 nike

我正在尝试编写一个 Windows 批处理文件,它将查看一个特定的 html 索引文件,看起来像这样(简化)

<a href=emergency.htm>Emergency Calls</a><br>
<a href=EmeRgency.htm>Emergency Calls</a><br>
<a href=Emergency.htm>Emergency Calls</a><br>
<a href=EMERGENCY.htm>Emergency Calls</a><br>
<a href=E911.htm>Emergency Calls</a><br>
<a href=e911.htm>Emergency Calls</a><br>

并打印文件名包含任何大写字母的所有链接,以便更正它们不包含任何大写字母。

以下适用于 unix:

$ grep -v '^<a href=[^A-Z]*\.htm' helpindex.htm
<a href=EmeRgency.htm>Emergency Calls</a><br>
<a href=Emergency.htm>Emergency Calls</a><br>
<a href=EMERGENCY.htm>Emergency Calls</a><br>
<a href=E911.htm>Emergency Calls</a><br>

(-v 反转匹配)

但是在 Windows 下使用 UnxUtils grep,它是 unix grep 的直接端口,我无法想出一种引用有效正则表达式的方法。这对于在批处理文件中使用它是必要的。我试过 ', "没有任何乐趣,也试过 -E 开关。有没有办法使用这个特定的工具集来做到这一点?

@janos 引导我使用 Windows 中的 findstr 命令,但它仍然不起作用。查看我看到的 findstr 帮助:

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file] [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]] strings [[drive:][path]filename[ ...]]

...
/V Prints only lines that do not contain a match. ...
/C:string Uses specified string as a literal search string. ...

Use spaces to separate multiple search strings unless the argument is prefixed with /C. For example, 'FINDSTR "hello there" x.y' searches for "hello" or "there" in file x.y. 'FINDSTR /C:"hello there" x.y' searches for "hello there" in file x.y.

但是,这也不起作用:

C:\home\sftp>findstr /V  /C:"^<a href=[^A-Z]*\.htm" helpindex.htm
<a href=emergency.htm>Emergency Calls</a><br>
<a href=EmeRgency.htm>Emergency Calls</a><br>
<a href=Emergency.htm>Emergency Calls</a><br>
<a href=EMERGENCY.htm>Emergency Calls</a><br>
<a href=E911.htm>Emergency Calls</a><br>
<a href=e911.htm>Emergency Calls</a><br>

要么 findstr 是垃圾,要么与 grep 有一些细微的差别。

最佳答案

这在 Windows 命令控制台中对我来说很好用:

grep -v "^<a href=[^A-Z]*\.htm" helpindex.htm

FINDSTR 不适用于 [^A-Z],因为它使用了非标准的归类序列:参见 Why does findstr not handle case properly (in some circumstances)?

您可以使用 FINDSTR 通过以下方式获得所需的输出:

findstr /rvc:"^<a href=[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]*\.htm" helpindex.htm

需要/C 选项来强制将整个字符串视为一个搜索词。

需要/R 选项来强制将搜索词解释为正则表达式。/C 选项的默认值是字符串文字。

您可能想看看 What are the undocumented features and limitations of the Windows FINDSTR command? .有一长串“陷阱”

编辑

UnxUtils 是用于 Windows 的 GNU unix 实用程序的旧的、过时的发行版。您应该从 GNU Coreutils 获得更新的版本:参见 Difference between UnxUtils and GNU CoreUtils

我相信我从 http://gnuwin32.sourceforge.net/packages/coreutils.htm 获得了我的 GNU Coreutils 分发版.我不确定这是否是最新的软件包,但它应该可以解决您的 grep 问题。它提供了许多实用程序的便捷包。

另一种选择是从 http://gnuwin32.sourceforge.net/packages.html 获取适用于 Windows 的单个 GNU 实用程序

关于windows - grep 在 Windows 批处理文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com