すろっくさんだよ。
さすがに平成も終わりに差し掛かるのでperlでWebアプリケーション作ろうとは思わないんですけど、ワンライナーはたまにやります。Perlだけだとフフッってなるのでシェルもいれますね。
Perl編
オプションです。
- w 警告
- e 一行で書くぜ宣言
- n 読み込みループ(出力なし)
- p 読み込みループ(出力あり)
- l 行末処理
- M モジュールをロード
適当につかってるやつです。。
ファイル名を指定してファイルの中の文字列1を文字列2に置換します。
perl -pi -e "s/文字列1/文字列2/g" [ファイル名]
Linuxコマンドのcatと同じ挙動です。ファイル名をただ標準出力に出します。
perl -wpl -e "” [ファイル名]
catして一部を置換します。最初のと挙動は同じかな。
perl -wnl -e “s/<元ワード>/置換ワード/g; print;” <filename>
こっちも同じ挙動ですね
perl -wpl -e “s/<元ワード>/置換ワード/g;” <filename>
nは出力なしなので、標準出力させたければwplと書く方がいいです。nでやったあと出力しようとすると最後にprintって書くので面倒です。
改行を全ての出力につけます。改行があればなにもしません。
perl -wnl -e "print $.;” <ファイル名>
$なんとかの扱いは以下ですね。
- $ 変数
- $. レコード番号]
- $_ 読み込んだ内容全部
ファイルを行番号つきで標準出力します。
perl -wnl -e 'printf "$.: ";print;’ <ファイル名>
grepがわり。
perl -wnl -e “/[検索したいワード]/ and print;” <filename>
シェル編
ディレクトリの下のファイルを一括して取り出して何日以上前のをなんか処理します。
mtimeで日にちを指定してください。
find /var/log/ -mtime +14 -exec rm -f {} \;
対象プロセスを全殺しします。
pidファイルを無くしちゃって、でもプロセスが大量に動いてて一個一個kill -9するのまじめんどくセーみたいなときに使います。
pgrep -f "プロセス名の一部" | xargs kill
こっちでもいけます。
ps aux | grep "プロセス名の一部" | awk '{print $2;}' | xargs kill
思い出したら追記します。