2011-11-09 4 views
1

Microsoft findstrを使用して1行のアイテムを "grep"するにはどうすればよいですか?今私は<date>の内側に内容をgrepしたいと</date>がどのように私は正規表現を記述した場合1行でアイテムをgrepするためのfindstr一式の正規表現

<config>test</config><item>some data</item><date>2007-11-02</date><datestart>2007-10-31</datestart><path>d:\test\test\test.txt</path> 

を:

私はこのような何かを行くラインを持っていますか?

注目すべき点の1つは、日付をgrepして変数に格納するためにfindstrコマンドをforループに入れなければならないことです。

例:彼らは変更になる場合がありますよう

for /f "Tokens=* Delims=" %%i in ('findstr /r /c:"regex" file.txt') do (
    set date=%%i 
    set date=!date:-=! 
) 

また、私はトークンに依存する必要はありません。

+0

この問題は 'findstr'で解決できないと思います。私の答えを見てください。 – Aacini

答えて

1

:の後に、変数の行を読み込んだ行にない区切り文字(例えば、$)によって<date></date>を変更。 for /F "tokens=2 delims=$"を使用して内容を内部で取得してください。

set /P the_line=< file.txt 
set the_line=!the_line:^<date^>=$! 
set the_line=!the_line:^</date^>=$! 
for /F "tokens=2 delims=$" %%i in ("!the_line!") do set date=%%i 
set date=%date:-=% 
+0

ありがとう!私はそれを試みます。これは可能ですか: 日付を新しい日付に置き換えたい場合: 'set/p the_line = newfile.txt' – NiklasJ

+0

はい、OKです。 – Aacini

0

あなたの日付に一致する正規表現"[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]"を使用することができます。

私たちは、あなたがやりたいトリックを使用することができ
+0

その行からその特定の文字列だけを返しますか?私が持っている問題は、全体の行が返されるということです。 – NiklasJ

+0

hmm findstrについてはわかりません。 grep -o これを行うでしょう。 – BON

関連する問題