技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

unix/linux:perlの複数命令を1行のコマンドで実行する(例:文字列のバイト位置走査)

表題の通り、unixlinuxでは、perlの複数命令を1行のコマンドで実行することができます。
-eオプションによりコマンドライン上で実行可能となり、1つ1つの命令を ; で区切ることで複数命令を記述可能となります。
 
perlはファイル操作や正規表現に優れているスクリプト言語であるため、コマンドライン上でperlを駆使することができれば作業の幅が広がります。
 
以下は、ファイルの中から特定の文字列のバイト位置を走査する例です。
ファイルの先頭で見つかった場合は0、次のバイトで見つかった場合は1、…といった具合で値が返ります。
見つからなかった場合は-1が返ります。
(例えば、改行コード無しのファイルで特定のデータをcutで除外したい時に、除外する位置を確認するのに使えます)
 
#> cat hoge.txt
#> abcde
#> perl -e 'my $str; my $pos; $str = `cat hoge.txt`; $pos = index($str,"a"); print "$pos\n";'
#> 0
#>
 
-------------------------
 
ちなみに、perl -eには便利な追加オプションがいくつもあります。
(標準入力(インプット)を1行1行処理、改行の強制付与、等)
perl ワンライナー」で検索すると参考になるページが出てきます。