wc -l および grep の代替品を Windows 上の Perl で書く

2023/04/19 0:37 Perl
Windows マシンにおいて、
Unix 系で使われる行数取得コマンド wc -l や、行単位検索コマンド grep が使えない環境だけれど Perl が使えるといったときのために、
このコマンドの代わりとなるバッチファイルを書きました。

wc -l の代わり

wc-l.bat
@ECHO OFF
perl -ne "END{print $.}"
前のコマンドの標準出力を受け取って、
C:\>type example.txt | wc-l
のように使います。

grep の代わり

grep.bat
@ECHO OFF
perl -ne "BEGIN{$a = '%~1'; $opt = ''; $opt = $1, $a = '%~2' if $a =~ /^-([a-zA-Z]*)/;} eval qq{print if /$a/$opt}"
wc と同様に、
C:\>type example.txt | grep 123
や、正規表現を使って
C:\>type example.txt | grep "[1-3a-cX-Z]{3}"
のように使います。

引数に「^」や「{}」等の記号を使いたい場合には引数をダブルクォートで囲みます(どんな引数のときでも囲っておけば間違いないです)。

最初の引数にハイフン(-)に続いてアルファベット(a-z, A-Z) を指定することで、検索オプションを与えることが出来ます。
C:\>type example.txt | grep -i abc
この場合のように -i を指定した場合、大文字・小文字を区別しなくなります。

検索オプションを指定するのではなくハイフン(-)に続いた文字列そのものを検索したい場合は、最初の引数にハイフン(-)のみを与えます。
C:\>type example.txt | grep - -xyz