windows命令行中,我要在文件中搜索以以下开头的所有行:
# NNN "<file>.inc"
其中,
NNN
是一个数字,<file>
是任何字符串。我想使用findstr,因为我不能要求脚本的用户安装ack。
下面是我想出的一个表达式:
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*.inc" all_pre.txt
要搜索的文件是
all_pre.txt
。到现在为止,一直都还不错。现在,我想把它转换成另一个命令,比如
more
。>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9]*.inc" all_pre.txt | more
其结果与前一个命令的输出相同,但每行的前缀是文件名(all_pre.txt)。
然后来:
FINDSTR: cannot open |
FINDSTR: cannot open more
为什么水管不管用?
截取所有pre.txt的内容
# 1 "main.ss"
# 7 "main.ss"
# 11 "main.ss"
# 52 "main.ss"
# 1 "Build_flags.inc"
# 7 "Build_flags.inc"
# 11 "Build_flags.inc"
# 20 "Build_flags.inc"
# 45 "Build_flags.inc(function a called from b)"
编辑:我还需要转义正则表达式中的点。不是这个问题,但值得一提。
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc" all_pre.txt
在Frank Bollack之后编辑:
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc.*" all_pre.txt | more
不起作用,尽管(我认为)它应该查找与之前相同的字符串,然后任意次数查找任何字符。必须包括
"
,对吗? 最佳答案
您的搜索模式中缺少一个尾随的\"
。
findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9]*.inc\"" all_pre.txt | more
以上对我有用。
编辑:
findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9]*\.inc.*\"" all_pre.txt | more
此更新的搜索字符串现在将与示例中的以下行匹配:
# 1 "Build_flags.inc"
# 7 "Build_flags.inc"
# 11 "Build_flags.inc"
# 20 "Build_flags.inc"
# 45 "Build_flags.inc(function a called from b)"
编辑:
要避免
findstr
中的此“错误”,可以将搜索放入如下批处理文件:@findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc" %1
把它命名为
myfindstr.bat
然后这样称呼它:myfinsdtr all_pre.txt | more
现在可以像往常一样使用管道和重定向操作符。
希望能有所帮助。
关于windows - 管道findstr的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2737107/