揮発性のメモ2

http://d.hatena.ne.jp/iww/

perl

デバイス名、IPアドレス、ネットマスク のリストを出力する

$ ip -o a s| perl -nle 'if(/^\d+: (\w+)\s+inet ([\d\.]+)\/(\d+) /){ $e=join(".", unpack("C*",pack("N",0x100000000-(2**(32-$3)))));print "$1\t$2\t$e"}' lo 127.0.0.1 255.0.0.0 eth0 172.16.1.1 255.255.0.0 usb0 192.168.7.2 255.255.255.252

perlでtouch

ファイルを作って時刻を更新する open(my $tmpfh, ">>", "/tmp/hoge.text") and close($tmpfh); utime(undef, undef, "/tmp/hoge.text"); ファイルを作成する - Perlゼミ(サンプルコードPerl入門) perl で touch | 裏表(Phinloda のもう裏だか表だか分からな…

perlのCGIでのファイルアップロード処理

最低限のコードで use File::Copy; use CGI; my $cgi = new CGI; # 仮ファイルが勝手に作られ、勝手に消える my $upfile = $cgi->param('upfile'); # アップロードしたときのファイル名(hoge.txtとか) my $tmpfile = $cgi->tmpFileName($upfile); # アップロ…

PhpStormで、perlのコメントを折りたたまない

コメントが折りたたまれてしまうのを防ぐには メニューの File⇒Settings から Editor⇒General⇒Code Folding の一番下 Perl5の ☑ Sequentional line comments のチェックマークをオフにする

エスケープシーケンス除去

cvs diff | perl -pe 's/\e\[[;\d]+[mk]//g' cvs diff | sed -r "s:\x1B\[[0-9;]*[mK]::g" ANSI カラーシーケンスを除去するコマンド - わからん ANSIエスケープシーケンスを除去する · GitHub

STARTとENDに挟まれた行を別のファイルと置換する

a.txt the world stop time START this is my world END and time resumesa.txt のうち、START と END に挟まれた部分を別ファイルb.txtと置換する ただしSTARTとENDの行は残す sedの場合 sed -n '1,/START/p' a.txt; cat b.txt; sed -n '/END/,$p' a.txt pe…

16進の文字列を文字にして吐くプログラム

#!/usr/bin/perl $hex = $ARGV[0]; $bin = pack('H*',$hex); print $bin; Perlの組み込み関数 pack の翻訳 - perldoc.jp

連番のURLを展開する

./tenkai.pl http://example.com/[7-11].pdfで http://example.com/7.pdf http://example.com/8.pdf http://example.com/9.pdf http://example.com/10.pdf http://example.com/11.pdfに展開するスクリプト #!/usr/bin/perl $url = $ARGV[0]; $url =~ /^(.*)\…

特定の文字が出るまでテキスト(バイナリかも)を表示する

\0が出てくるまで表示 cat b.txt | perl -ne '$a=index($_,"\0"); if($a<0){ print $_ }else{ print substr($_,0,$a); exit; }'

日付フォーマットの変換

"Aug 2 17:34:10" を "2013-08-02 17:34:10" に変換する DateTimeモジュール http://ido.nu/kuma/2007/05/09/datetimeformat-summary/ によると、"Aug 2 17:34:10" は DateTime::Format::HTTP のフォーマットに近そう。 http://iandeth.dyndns.org/mt/ian/ar…

ファイルの内容を全て文字列に読み込む

プロセス生成のコストとか気になったらちゃんと書き直す。気にならなければこのまま。 my $text = `cat a.txt`; In Perl, how can I read an entire file into a string? - Stack Overflow my $text = do { local $/=undef; open(my $fh,"a.txt"); <$fh> }; …

スクリプト自身のディレクトリ名を取得する

File::Basename - perldoc.perl.org Cwd - perldoc.perl.org #!/usr/bin/perl use File::Basename; use Cwd 'abs_path'; # my $mydir = abs_path(dirname($0)); my $mydir = dirname(abs_path($0)); print "$mydir\n"; abs_path(dirname( の順での呼び出しの…

ヒアドキュメント

#!/usr/bin/perl $a="aaaaa"; print << "__HOGEHOGE__"; # ←ここのセミコロンを忘れると start -----$a----- end __HOGEHOGE__ print "END\n"; # ←ここでエラーになる

Config::Simpleのバグ?

Config::Simple 4.59 では、ハッシュが空っぽの状態からは 新たに変数を追加できない。 #!/usr/bin/perl use strict; use warnings; use diagnostics; use Config::Simple '-strict'; my $cfg = new Config::Simple; $cfg->read('/tmp/test.conf'); #★ここで…

環境変数の設定

print `LANG=C aplay -l`; $ENV{"LANG"} = "C"; print `aplay -l`;

入力デバイスの入力をperlで見る

USBヘッドセットについてるボタンの押されっぷりとかを取得する話 Linux Input Subsystemの使い方 とりあえずSYNとかそういうのよくわからないので全部出す #!/usr/bin/perl open(my $fh, $ARGV[0]) or die; binmode($fh); while( read($fh, my $buf, 16) ){…

正規表現でマッチした文字列を取得する

グループ $s = "2013/11/12"; ($y,$m,$d) = $s =~ /(\d+)\/(\d+)\/(\d+)/; print "$1-$2-$3\n"; print "$y-$m-$d\n"; 2013-11-12 2013-11-12 複数マッチ $s = "456__123___789"; @m = $s =~ /[\d]+/g; print "@m\n"; 456 123 789参考:perl で正規表現にマッ…

タブをスペースに変換する

指定したファイルの ソースのタブ文字を、好きな幅でスペースに一括で変換する $ perl -MText::Tabs -i -ne 'BEGIN{$tabstop=4} print expand $_' *.cpp *.h $tabstopというのがなんとグローバル変数なので、これでタブ幅を何文字分か指定する。 参考 タブと…

Config::Simpleをインストール

CPANとか使い方知らんし # apt-cache search Config::Simple # apt-get install libconfig-simple-perl

文字列の改行コードをCRLFからLFにする

行末のCRLFを消してLFだけにする perl -i -lpe 'BEGIN{$/="\r\n"}' a.txt -lは入力を自動chompする。 chompは行末のセパレータを削除する。 セパレータは$/で定義されている。 参考:[Perl]小話:多くの人に誤解されている chomp 君の地位を向上させてみる -…

ファイル一覧

あるディレクトリの最初のファイル名だけ表示するスクリプト 1:#!/usr/bin/perl 2:use strict; use warnings; 3: 4:if( opendir(my $dh, "/tmp/hoge/") ){ 5: print "dh=$dh\n"; 6: if( my $f = readdir $dh ){ 7: print "f=$f\n"; 8: } 9: closedir $dh; 10…

Time::Piece で日時の計算がおかしい

1年ごとの日付を表示してみる #!/usr/bin/perl use Time::Piece; use Time::Seconds; my $tp = localtime; for( my $i=0; $i<13; $i++ ){ $tp += ONE_YEAR; print $tp->strftime("%F %T\n"); } $ ./hoge.pl 2014-08-20 17:10:07 2015-08-20 22:58:57 2016-08…

エラー終了時にスタックトレースを出力する

なんかエラーで止まっちゃうときに、どこで止まったかを知るには、use diagnostics; をつかう。 1: #!/usr/bin/perl 2: 3: use strict; use warnings; 4: use diagnostics; 5: 6: use Time::Piece; 7: use Time::Seconds; 8: 9: sub henkan{ 10: my $timesta…

JDでDAT落ちしたログを消去する

Tips - JD for Linux Wiki - JD for Linux - OSDN これだと消し忘れが残るので一応全部消すように変更した #!/bin/sh DIR=${JD_CACHE:-~/.jd} find $DIR -type f -regex ".*/info/[0-9]+\.info$" \ | xargs grep -H "status =" \ | perl -nle '/^(.*)\/info\…

perlでCSVファイルの一部分を加工

900102,123,456 ⇒ 1990-01-02,123,456 CSVファイルの一部分を加工するときは、カンマで分解して加工してまたくっつける perl -nle '@a=split /,/; ($y,$m,$d)=($a[0]=~/(\d\d)(\d\d)(\d\d)/); $a[0]="19$y-$m-$d"; print join(",",@a);'

ファイルをバイナリとして読み込む

バイナリファイルを読む練習。 ファイルの先頭部分を読み込んで、GZIPのヘッダ(0x1F,0x8B,0x08,0x00)を探し、その先頭位置を出力するプログラム。 #!/usr/bin/perl use strict; use warnings; my $size=32768; open( my $fh, $ARGV[0] ) or die("open"); bin…

perlのダイアモンド演算子の挙動について

while(<>)のときは自動的に$_に入力文字列が入るけど、<>だけのときは入らない # 入力が$_に入らない <>; chomp; print "$_\n"; # 入力が$_に入る $_=<>; chomp; print "$_\n"; # 入力が$_に入る while(<>){ chomp; print "$_\n"; } while()の式の値が$_に入…

正規表現でマッチした文字列を出力

ifconfigの結果からIPアドレスを取り出して出力する /sbin/ifconfig | perl -ne '/inet addr:([0-9.]+)/ && print "$1\n"'

use feature 'state' は5.10.xから

http://www.geocities.jp/ky_webid/perl5/025.html Can't locate feature.pm in @INC (@INC contains: 以下略 Debian sargeでのperlのバージョンは5.8.4なので、エラーになる。

コマンドライン引数の取得

./a.out abc あいうえお '' 山田みたいなのをコマンドラインで渡したときの引数の取り方と、取れ方 java public class hoge { public static void main(String[] args) { System.out.println( "args.length=" + args.length ); for (int i=0; i