2015年7月3日金曜日

findコマンドについて

ms-dos、findコマンドのヘルプから
ファイル (複数可) 内のテキスト文字列を検索します。
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "文字列" [[ドライブ:][パス]ファイル名[...]]
  /V        指定した文字列を含まない行をすべて表示します。
  /C        指定した文字列を含む行の数だけを表示します。
  /N        行番号を表示します。
  /I        大文字と小文字の区別をしないで検索します。
  /OFF[LINE] オフライン属性が設定されたファイルをスキップしません。
  "文字列"  検索する文字列を指定します。
  [ドライブ:][パス]ファイル名
            検索するファイル (複数可) を指定します。
パスが指定されていないときは、プロンプトで入力されたテキストまた
は別のコマンドからパイプ処理で渡されたテキストを検索します。


このコマンドを使用すると、なぜか
---------- [[ドライブ:][パス]ファイル名[...]]ヒットした行1ヒットした行2



と出てくる。ハッキリ云って先頭の
---------- [[ドライブ:][パス]ファイル名[...]]
は要らない・・・。

コレを出さないようにするには、

find "文字列" %FILE_NAME% | find "文字列"

とすれば必要な部分だけに整形された。

ただ、ヒットさせた行を fortokens で分割させようとしたときに問題が・・・。

for /f "tokens=1-3" %%a in ('find "文字列" %FILE_NAME% | find "文字列" %FILE_NAME%') do echo %%a %%b %%c

みたいな事はできない。
for /f "tokens=1-3" %%a in ('find "文字列" %FILE_NAME%') do echo %%a %%b %%c

を注意深く観察すると、
  1. ---------- [[ドライブ:][パス]ファイル名[...]]
  2. ヒットした行1
  3. ヒットした行2

のような感じで、行数分ループしていた。
で、1行目だけ要らないので、コメント行扱いにする eol を使用する。
for /f "eol=- tokens=1-3" %%a in ('find "文字列" %FILE_NAME%') do echo %%a %%b %%c

これで無事 find でヒットした行をtokenizeさせることができた。

0 件のコメント:

コメントを投稿