【问题标题】:grep like syntax with findstr与 findstr 类似的 grep 语法
【发布时间】:2011-12-12 11:12:16
【问题描述】:

我最近在 linux 上使用了很多 grep,但现在我需要使用 findstr 在 windows 机器上执行相同的任务并且不能完全正确地获得语法。

我的 grep 命令如下所示:

grep "12/12/2011.\*followed by literal string" /myFile.txt

所以这会搜索日期和指定的文字字符串,但可以使用 .\* 在两个搜索词之间包含任何其他字符的混合

有人知道如何将此语句转换为 findstr 吗?谢谢

【问题讨论】:

  • 你可以下载 Windows 的 grep:gnuwin32.sourceforge.net/packages/grep.htm
  • 我有很多 windows 机器和 id 宁愿充分利用 windows 默认提供的工具,而不是在每台机器上安装额外的包 .. 感谢您的意见!

标签: windows linux grep wildcard findstr


【解决方案1】:

findstr 命令支持/R 选项将搜索字符串指定为正则表达式。但是,这是默认行为,因此您实际上不需要指定它:

findstr "12/12/2011.*followed by literal string" myFile.txt

上面的结果应该与您的 grep 示例相同。

【讨论】:

  • 但是有没有一种方法可以让 findstr 使用 /C 和通配符的组合将上述搜索作为文字搜索字符串?我需要结果行包含“12/12/2011 *ANY CHARACTERS INBETWEEN* 后跟文字字符串”.. 而使用正则表达式返回的结果将包含 myFile.txt 中找到的文字字符串的混合
  • @Bob,我不确定我是否理解您的评论。根据我的经验,findstr 将输出与正则表达式匹配的行的确切内容。您能否详细说明mixtures of the literal string 的含义?
  • 是的,你给出的命令将返回结果,即使它们只包含上面的文字字符串的一部分,即“后跟文字字符串”。因此,如果找到包含日期和返回该行的单词“followed”的行,我需要该命令仅在该行包含整个文字字符串时才返回结果,“后跟文字字符串”,有意义吗?
  • ive 最终使用了 'findstr /C:"followed by literal string" myFile* .. 然后检查是否有任何结果包含日期。感谢您的输入 Frederic,我将您的答案标记为已接受,因为它与我正在寻找的内容非常相似
【解决方案2】:

为了匹配文字字符串,您应该使用/C 标志,例如:/C:"Your literal string here" 否则正则表达式中的空格被视为OR,例如这个:

findstr "12/12/2011.*followed by literal string" myFile.txt

相同
grep 12/12/2011.*followed|by|literal|string myFile.txt

为了将两者结合起来,将一个的输出通过管道传输到另一个,如下所示:

findstr "12/12/2011.*" myFile.txt | findstr /C:"followed by literal text"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多