弱小エンジニアの私でもシェル芸たのしかった。

  • 3
    いいね
  • 0
    コメント

:pig:自己紹介

名前:yuna miyashita
弱小エンジニア。シェル芸初心者。
主にボットを作成したり色々しながら働いています。

Twitter : @butackle66
Qiita : @Butackle

alt  alt  alt


シェル芸とは

マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理をCLI端末へのコマンド入力一撃で終わらすこと。あるいはそのときのコマンド入力のこと。

https://blog.ueda.asia/?page_id=1434より引用

ワンライナーとも言う。
簡単なのだと、こんなん↓
history | grep awk


好きになったキッカケ

シェル芸勉強会と呼ばれている勉強会に行ったこと。
正式名称を「jus、USP友の会共催シェル勉強会/シェルワンライナー勉強会」と言うらしいです。

シェル芸人さんたちにサインもらいました:heart:

IMG_20170204_165301_798.jpg


何が面白いか

「ワンライナーで完結させる」という楽しさ

普通のシェルスクリプトやプログラムなら『ココで変数に入れて、次にコレを渡して…』とかで出来ることですが、「ワンライナーで」という制約が付くだけで難易度が上がって、途端に面白くなります。


何が面白いか

コマンドに詳しくなる

日々、開発に勤しんでいる人でも、分野によってはコマンド能力が上達しにくい気がしています。
シェル芸を勉強すると、1つ1つのコマンドを深堀りして勉強できます。


何が面白いか

日々の業務でも簡単に使える

私はCSVやJSONのテストデータを作成するのに使ったりします。
シェル芸人猛者になるとエクセルの編集などもワンライナーでするようです。

ex. 名前とメールアドレスのCSVファイルを作る。

echo "name,email" > test.csv ; 
seq 10 | 
awk '{system("faker-cli -L ja -n findName");print ",";system("faker-cli -i email")}' | 
tr  -d '\n' | 
perl -pe 's/""/\n/g' | 
tr  -d '"' >> test.csv
name,email
大翔 中村,Damian.Dooley@gmail.com
結衣 鈴木,Casandra_Goldner@gmail.com
海翔 松本,Henderson43@gmail.com
陸斗 山本,Perry_Hammes@gmail.com
海翔 林 III,Lauryn_Schmitt96@yahoo.com
結愛 田中,Lonny.Hayes@hotmail.com
結愛 加藤,Gunner_Quitzon26@yahoo.com
大翔 佐藤,Rex60@yahoo.com
海翔 井上,Keyshawn5@gmail.com
太一 高橋,Gillian34@hotmail.com

ex. 上記のCSVファイルからJSONファイルを作る。

cat test.csv | 
awk -F, 'BEGIN{print "[";}{if(NR==1) {n=$1;e=$2;}else{ print "{\""n"\":\""$1"\",\""e"\":\""$2"\"}," }}' | 
tr -d '\n' | 
sed -e 's/},$/}\]/g' | 
jq . > test.json

[
  {
    "name": "大翔 中村",
    "email": "Damian.Dooley@gmail.com"
  },
  {
    "name": "結衣 鈴木",
    "email": "Casandra_Goldner@gmail.com"
  },
  {
    "name": "海翔 松本",
    "email": "Henderson43@gmail.com"
  },
  {
    "name": "陸斗 山本",
    "email": "Perry_Hammes@gmail.com"
  },
  {
    "name": "海翔 林 III",
    "email": "Lauryn_Schmitt96@yahoo.com"
  },
  {
    "name": "結愛 田中",
    "email": "Lonny.Hayes@hotmail.com"
  },
  {
    "name": "結愛 加藤",
    "email": "Gunner_Quitzon26@yahoo.com"
  },
  {
    "name": "大翔 佐藤",
    "email": "Rex60@yahoo.com"
  },
  {
    "name": "海翔 井上",
    "email": "Keyshawn5@gmail.com"
  },
  {
    "name": "太一 高橋",
    "email": "Gillian34@hotmail.com"
  }
]