バッチで一致する部分文字列の行番号を返す

バッチで一致する部分文字列の行番号を返す

常に同じプレフィックスを持つファイル内の行番号を返したいのですが、残りは変化する可能性があります。

標準の Windows コンポーネントとコマンドライン操作ユーティリティのみを使用してファイルを検索し、一致する部分の行番号を返すことは可能ですか。

私が探している行の例は次のとおりです。

</TR></TABLE><TABLE cellspacing... 変化する可能性のあるその他のコード

ファイル内の行はジェネレータの出力であるため、ファイルが生成されるたびに何が変更されたか、または何が変更される可能性があるかはわかりません。

答え1

FINDSTR はファイル内のテキストを検索し、検索に一致する各行を出力するために使用されます。この/Nオプションにより、出力の各一致行の先頭に行番号が として追加されますLineNumber:FullTextOfMatchingLine

検索文字列にスペースが含まれているため、/C:"search string"オプションを使用する必要があります。そうしないと、検索文字列はスペースで区切られた複数の検索用語として解釈されます。

検索を行頭のみに一致させたいので、オプションが必要です/B。または、/R検索を正規表現として扱うオプションを追加し、^検索文字列の先頭に行頭アンカーを使用することもできます。

findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"

一致する行のテキストなしで、行番号のみを要求します。FOR /F を使用して、必要な行番号を抽出できます。

for /f "delims=:" %A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do @echo %A

コマンドをバッチ ファイルに入れる場合は、パーセントを 2 倍にする必要があります。

@echo off
for /f "delims=:" %%A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do echo %%A

答え2

ファイル内のfindstr /N strings filenameのインスタンスを検索するには、を使用します。stringsfilename

注: /N「一致する各行の前に行番号を出力します」

詳しい使用方法については、findstr /?

関連情報