LoginSignup
3
4

More than 5 years have passed since last update.

mac で perl のワンライナー #1

Last updated at Posted at 2015-01-11

perl のワンライナーに関しての、適当な解説 #1/#2/#3/#4

一般的な事

ワンライナーは、コマンドラインフィルターの常套手段。
つーことで、初歩的なコマンドラインフィルターを2、3
ああ、当然 perl で説明しますが、 awk でも普通に出来ることも

mac only

pbpaste

もちろんご存知 pbpaste

s/\r/\n/g

$ pbpaste | perl -lpe 's/\r/\n/g' | pbcopy

nkf 使いたいけどね

URL

例えば、URL 引っ込ぬくのに

$ pbpaste | perl -lpe 's/^/curl -O /' | sh
#$ pbpaste | perl -lne 'qx{curl -O $_}' # 別解

なんてして、sh に食わせるのは基本

ファイルに一々保存して、cat SOMETING.txt | perl ... なんて事はやりたくない、、、

URL と他の文が混っているならば、

$ pbpaste | perl -lne 'qx{curl -O $1} if /(http.*?jpg)/' 
# 正規表現部分は、本来はもっとしっかりと書くべき

URL が一行一サイトに限らないのであれば、

$ pbpaste | perl -lne 'qx{curl -O $1} while /(http*?.jpg)/g'

Automator でサービス化するんだったらもちょっと正規表現には手を加えないといけない、、、

tree もどき

mac には存在しない tree コマンド
perl で実装するとこんな感じ

find . | perl -MCwd -lpe 'my $f = -d ; s{[^/]*/}{+--}g;s{\+--(?=\+)}{   }g;s/^\.$/getcwd/e ; $_ .= q{/} if $f'

ネットのどこかで拾ったものを改造

実際の運用では、.bashrc

function tree () {
    find . "$@" | perl -MCwd -lpe 'my $f = -d ; s{[^/]*/}{+--}g;s{\+--(?=\+)}{   }g;s/^\.$/getcwd/e ; $_ .= q{/} if $f'
}

とでも書いて、

$ tree -maxdepth 2

などとする

2019/02/21 追記

現状では、

function tree () {
    find $(pwd) "$@" | \
        perl -lpe '$a //= $_ ; my $f = -d ;' \
            -e 's{$a}{} ; s{[^/]*/}{+--}g; s{\+--(?=\+)}{   }g; ' \
            -e '$_ ||= $a  ; ' \
            -e '$_  .= q{/} if $f'
}

こっちだと -name '.*' -prune -o -print が効く。

$ tree -maxdepth 2 -name '.*' -prune -o -print | head
/Users/bunzaemon/
+--Music/
   +--iTunes/
+--cmd/
   +--homebrew/
+--Pictures/
   +--写真 Library.photoslibrary/
+--Library/
   +--Application Support/
   +--Maps/

不可視ファイルが見えなくなってすっきり。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4