Skip to content

Instantly share code, notes, and snippets.

@greymd
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save greymd/a6933f2472b888a75014 to your computer and use it in GitHub Desktop.
Save greymd/a6933f2472b888a75014 to your computer and use it in GitHub Desktop.
南武線の駅の中で、快速→各停→快速 となっている不憫な並びの3駅を抽出するegisonシェル芸。
# 南武線の駅の中で、快速→各停→快速 となっている不憫な並びの3駅を抽出するegisonシェル芸。
curl -so- -L goo.gl/4Gl1BL | tr ',\n' '\t' | egison -F 1cs -m '(match-all-lambda (list something) [ <join _ <cons $x <cons ,"快速" <cons $y <cons ,"各停" <cons $z <cons ,"快速" >>>>>>> [x y z]] )'
# [Result]
# {["鹿島田" "平間" "向河原"] ["登戸" "中野島" "稲田堤"] ["稲田堤" "矢野口" "稲城長沼"]}
#
# 既存のgrep等による単純な文字列マッチでは難しいオーバーラップしたパターンをループなしで検出できる。
# curlで習得する文字列には「稲田堤」はひとつしか含まれていないが、
# 例では稲田堤がオーバーラップしている。
@egisatoshi
Copy link

面白い例ありがとうございます!

以下、同じことをするワンライナーを僕の期待している書き方に書き直してみました。
この場合、-sオプションを使ったほうが、より一般的なレコードに対応できます。

% curl -so- -L goo.gl/4Gl1BL | tr -d '\r' | tr ',' '\t' | egison -F1s -s '(match-all-lambda (list [string string]) [ <join _ <cons [$x ,"快速"] <cons [$y ,"各停"] <cons [$z ,"快速"] _>>>> [x y z]])'
["鹿島田" "平間" "向河原"]
["登戸" "中野島" "稲田堤"]
["稲田堤" "矢野口" "稲城長沼"]

@greymd
Copy link
Author

greymd commented Jan 20, 2015

Egiさん、なるほど、コレクションではなく-sオプションをつかってタプルとして読ませればよかったんですね!私がやろうとして挫折したやり方でした……w
ありがとうございます!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment