-1

正規表現のPerl実行から一致した値を返すにはどうすればよいですか?

バッチファイルで一致をさらに使用したいと思います。

バッチファイル:

perl -p -e "ab{2}" c:\file.txt
REM echo %var% how can I get the result from perl?
REM do something with %var%

ファイルfile.txt

abbreviation

zb226の更新:

test

Filename: dynamicFile.txt
Property: some property to neglect
Message: the message I want
Time: dynamicTime
4

3 に答える 3

1

FORそのためのコマンドが必要です:

@ECHO OFF
FOR /F "delims=" %%I IN ('perl -ne "print $1.\"\n\" if ~/(ab{2})/" c:\file.txt') DO SET match=%%I
ECHO match: %match%

これにより最後の一致が返されることに注意してください。これは、例のregexpab{2}には関係ありません。これは、常に返されるabbか、何も返されないためです。

編集1:perl onlinerに改行を追加するのを忘れた-あるいはperl -pe ...、改行を印刷する必要のないAndreyのバージョンを使用することもできます。

編集2:繰り返しになりますが、Andreyのワンライナーは行の先頭でのみ正規表現と一致します。これはあなたの質問が示唆していることではありません。また、すでにお気づきのように、一致しない行を印刷します。バージョンの簡単な修正は考えられませんperl -pe...

編集3:コメントで提供した追加情報の迅速で汚い解決策は次のとおりです。

@ECHO OFF
FOR /F "usebackq delims=" %%I IN (`perl -e "local $/ = undef; open my $h, '<', $ARGV[0]; my $x = <$h>; print $1 if $x=~/Filename: dynamicFile.txt.*?Message: (.*?)Time/s;" c:\file.txt`) DO SET match=%%I
ECHO match: %match%

のテストファイルで...

test

Filename: dynamicFile.txt
Property: some property to neglect
Message: the message I want
Time: dynamicTime
----
Filename: someOtherFile.txt
Property: some property to neglect
Message: someMessage
Time: dynamicTime

...この出力:

match: the message I want
于 2013-02-20T15:02:16.167 に答える
0

perl -p -e "s/^(ab{2}).*$/\1/" c:\file.txt

于 2013-02-20T14:51:55.790 に答える