次のテキストのすべての行を FINDSTR /R と一致させたい
LABO_A =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = LABO)
)
)
既に試しました Windows FINDSTR コマンドの文書化されていない機能と制限は何ですか? 特に「改行をまたぐ検索」の部分。しかし、残念ながらうまくいきませんでした。
私のアプローチは次のとおりです。
SETLOCAL
set LF=^
FOR /F %%A IN ('COPY /Z "%~dpf0" NUL') DO SET "CR=%%A"
SETLOCAL enableDelayedExpansion
FINDSTR /R "LABO_A.=.!CR!*!LF!.*(DESCRIPTION.=.!CR!*!LF!.*(ADDRESS.=.(PROTOCOL.=.TCP)(HOST.=.host01)(PORT.=.1521))!CR!*!LF!.*(CONNECT_DATA.=!CR!*!LF!.*(SERVICE_NAME.=.LABO)!CR!*!LF!.*)!CR!*!LF!.*)" %FINDPATH%
何か不足していますか?それとも、バッチ正規表現は単にこれを実現するほど強力ではないのでしょうか?
解決策: @dbenham のアプローチにより、正規表現文字列を再考することができました。だから私はそれを編集しました
FINDSTR /R /C:"LABO_A =!CR!*!LF!.*(DESCRIPTION =!CR!*!LF!.*(ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))!CR!*!LF!.*(CONNECT_DATA =!CR!*!LF!.*(SERVICE_NAME = LABO)!CR!*!LF!.*)!CR!*!LF!.*)" %FINDPATH% > NUL
不要な空白をいくつか削除し、FINDSTR のパラメーターを調整しました。
今では動作します。