【问题标题】:Batch findstr regular expression to grep an item from a single line批量 findstr 正则表达式从单行 grep 项目
【发布时间】:2023-03-11 05:00:01
【问题描述】:

如何使用 Microsoft findstr 从单行“grep”一个项目?

我有这样一行:

<config>test</config><item>some data</item><date>2007-11-02</date><datestart>2007-10-31</datestart><path>d:\test\test\test.txt</path>

现在,如果我想对 &lt;date&gt;&lt;/date&gt; 中的内容进行 grep,我将如何编写该正则表达式?

需要注意的一点是,我必须将 findstr 命令放入 for 循环中,以便 grep 日期并将其存储在变量中。

示例:

for /f "Tokens=* Delims=" %%i in ('findstr /r /c:"regex" file.txt') do (
    set date=%%i
    set date=!date:-=!
)

另外,我不想依赖令牌,因为它们可能会有所不同。

【问题讨论】:

  • 我觉得这个问题用findstr是解决不了的。看我的回答。

标签: regex batch-file for-loop substitution findstr


【解决方案1】:

我们可能会使用一个技巧来做你想做的事:读取变量中的行后,将&lt;date&gt;&lt;/date&gt; 更改为不在行中的分隔符(例如,$);然后,只需使用for /F "tokens=2 delims=$" 来获取里面的内容。

set /P the_line=< file.txt
set the_line=!the_line:^<date^>=$!
set the_line=!the_line:^</date^>=$!
for /F "tokens=2 delims=$" %%i in ("!the_line!") do set date=%%i
set date=%date:-=%

【讨论】:

  • 谢谢!我会试试的。但是这是否可能:如果我想用新日期替换日期:set /p the_line=&lt; file.txtset the_line=!the_line:%date%=%newdate%!echo !the_line! &gt; newfile.txt
【解决方案2】:

您可以使用与您的日期匹配的正则表达式 "[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]"

【讨论】:

  • 它只会从该行返回该特定字符串吗?我遇到的问题是整行都被返回了。
  • 嗯我不确定 findstr。 grep -o 会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2013-08-11
  • 2023-03-04
相关资源
最近更新 更多