Windows 命令行,我想在文件中搜索所有以以下开头的行:
# NNN "<file>.inc"
whereNNN
是一个数字和<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
为什么管道不工作?
all_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
在弗兰克博拉克之后编辑:
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc.*" all_pre.txt | more
不起作用,尽管(我认为)它应该查找与之前相同的字符串,然后多次查找任何字符。那必须包括"
,对吗?