Windowsコマンドラインで、次で始まるすべての行をファイルで検索したい:
# NNN "<file>.inc"
ここNNN
で、は数値と<file>
任意の文字列です。
スクリプトのユーザーにackのインストールを要求できないため、findstrを使用したいと思います。
これが私が思いついた表現です:
>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
は機能していませんが、(私が思うに)以前と同じ文字列を検索し、その後任意の文字を何度も検索する必要があります。それには、が含まれている必要がありますよね"
?