謎のシェル芸メーカー

以前[Mastodon bot]20%の確率で性器を出すドラえもん!!という記事を書きました。見て頂けたでしょうか?

【Mastodon bot】20%の確率で性器を露出するドラえもん
以前[Python]Mastodon botを作ってトゥート!してみた!!という記事を書きました。しかしbotを作ったと言いながら、プログラムからトゥート!しただけであり、botとは言えないものでしたので、作ってみましたー。

その中で道具を集め〜のシェル芸の部分の反響が多く、書いてみた所存でございます。

シェル芸ってなんだよ💢って人が多かった。たまにTwitterにもトレンドインしてるが

とりあえず見てない人の為にドラえもんの記事のコピペ

20%以外は道具。しかしオーカワは道具の名前を覚えていなかったので、こちらのサイトの情報を参考にして道具の名前を集めてみました〜

道具はテキストファイルにまとめました〜

手順としては

  1. サイトから道具だけをコピーする。
  2. (道具)などのトゥート!に不要な文章の削除
  3. 全ての道具の語尾に”〜”を追加

面倒に見えますが、シェル芸使うと一瞬で出来ました~。

サイト開いてから3分位ですねーー

手作業なんかはうんちです。今度シェル芸を紹介出来る機会があれば紹介したいと思いますーー

(多くの方が「シェル芸って何?」ってなると思います。)

で、集めた道具の数が1847個!!!!!!!!!多すぎwwww

ドラえもんって金持ちなんだな(小並感)

3分程で集めた数なのでもっとあるかもしれないですー

一応作った道具リストも公開しときます。

*1847行以降は性器のリストです。

やること

  1. サイトから道具だけをコピーする。
  2. (道具)などのトゥート!に不要な文章の削除
  3. 全ての道具の語尾に”〜”を追加

シェル芸とは

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

GUIはGuraphical User Interface(グラフィカルユーザーインターフェース)の略です。

皆さんがよく使うWindowsとかはGUIです。

CLIはCommand Line Interface(コマンドラインインターフェース)の略です。

皆さんが怖いと思ってるかもしれない、あの黒い画面です。見たことあるかな?

僕は毎日使いますが、このブログを見ている人はあまり使わないのかも(わからん)

僕は普段Macbookを持ち歩いてるのでよく使います。(Macbook使ってるのも黒い画面があるから)

Windowsだったら、コマンドプロント、MacやLinuxだとTerminalをよく使います。

今回はこの黒い画面を使っていきます。

手作業ダメなの?別に手作業でもよくね?

はい。いいと思います。今回なら手作業でもすぐに終わる量だと思います。

ただ知識として知っとくと今後便利になるかも。

作業数が多くなればなるほど、シェル芸の真価は発揮されます。

今回の場合手作業だったらどうするの?

これは僕の想像です。異論は認めます。

初級編(全部手作業)

サイトから道具を範囲選択→コピー貼り付けを繰り返します。

で、()がついてる部分を自力で消して、語尾に〜をつけると。う〜ん頭が悪そう。

中級編(エクセルを使う)

エクセルのシートに道具を貼り付けます。

あとはエクセルの関数を複数使い完成させます。

Excelは何でも出来ますが、勿論適材適所があります。

一応関数はこんな感じ(B6がコピペしたもの,C6が足す文字,D6が作成した文字列)

fx = IFERROR(LEFT(B6,FIND("(",B6)-1),B6)&C6

上級編(エディタの機能を使う)

2大エディタ(主観)のEmacs,Vimにはいろいろな便利な機能がついてますのでそれをうまく使うと出来ると。これはコピペ以外一瞬で出来ますね。

エディタは人によって様々なのでここでは割愛します(本題ではないので)。

本題に入りましょう。

シェル芸してくわよ

ただ今回は理解してもらいたいというよりは、シェル芸を知ってもらいたいので、あまり詳しく書きませんのでご了承ください。

実行した環境

  • Linux
    •  OS
      • Ubuntu16.04
    • シェル
      • zsh
  • Mac
    • OS
      • macOS Sierra(10.12.3)
    • シェル
      • zsh
  • Windows
    • OS
      • Windows 10
    • シェル
      • Bash on Ubuntu on Windows

全て動作確認済みですが、今回はLinuxメインで書いてきます。

*Macだと一工夫必要です。

先に結果を出します。

$ curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7 | grep "<li>.*</.*>" | grep -o '">.*</.*>' | sed 's/">//g'| sed 's/(.*)//g' | sed 's/<\/a>/〜/g' >> tool_list.txt

変態だー変態だーもう一回言うぞ変態だー

Macでも少しコマンドいじるだけで出来ます。sed→gsedに変更してみてください。(gsedをインストールしていない場合は動きません)

インストールしていない方はこちらから

osx標準のsedはPOSIX sedなので-iオプションが使えないので不

作る手順

結果からわかる通り何個かコマンドを使って結果を出します。

勿論最初から答えなどはかけません(僕は)。なので僕がこのシェル芸を作った手順を説明できればなと。

手順1 道具を保存するファイルを用意(touch)

touchコマンドはファイルを新規作成する事ができるコマンドです。

$ touch tool_list.txt

これで空のtool_list.txtファイルが作られました。

手順2 ダウンロード(curl)

curlコマンドはファイルのダウンロードが出来るコマンドです。

今回はドラえもんの道具のページをダウンロードします。

$ curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7

実行結果(最初を抜粋)

<html lang="ja" dir="ltr" class="">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="generator" content="MediaWiki 1.19.24" />
<meta name="keywords" content="ドラえもん Wikia,doraemon,道具一覧,アンキパン,衛星中継テレビ,紙の工作「切り抜く本」,合成鉱山の素(道具),氷細工ごて,幸せトランプ,シズメバチの巣(道具),タマゴ産ませ燈,3Dゲーム,E.S.P訓練ボックス" />
<meta name="twitter:card" content="summary" />

こんな感じでサイトのhtmlをダウンロードします。抜粋でもかなり多いですが、実際はもっとあります。

手順3 文字列の検索(grep)

grepコマンドは文字列を検索するコマンドです。

$ curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7 | grep "<li>.*</.*>"

追加されたコマンド(grep "<li>.*</.*>")は<li>タグで始まり、なんかしらの終了タグ</>がある行だけを抽出します。

./ は正規表現というものです。もっと詳しく知りたいって方は以下リンクをご覧ください。

# 特定コマンドの正規表現で使えるメタ文字が何だかわから

実行結果(途中を抜粋)

</li><li><a href="/wiki/%E3%81%82%E3%81%84%E3%81%93%E3%82%B0%E3%83%AD%E3%83
%BC%E3%83%96" title="あいこグローブ">あいこグローブ</a>
</li><li><a href="/wiki/%E3%82%A2%E3%82%A4%E3%82%B9%E3%82%92%E4%BD%9C%E3%8
2%8B%E6%A9%9F%E6%A2%B0" title="アイスを作る機械">アイスを作る機械</a>
</li><li><a href="/wiki/%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A3%E3%82%A2%E8%
80%83%E3%81%88%E6%A9%9F" title="アイディア考え機">アイディア考え機</a>

これでもいらない文章(欲しいのは道具の名前)が多いので、さらに抽出をします。

手順4 文字列の抽出(grep)

grep コマンドは o オプションを使うと抽出ができます。

curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7 | grep "<li>.*</.*>" | grep -o '">.*</.*>'

追加されたコマンド(grep -o '">.*</.*>')は "> から始まり </〜〜〜> で終わる文字列を抽出します。

実行結果(途中を抜粋)

">スポーツマンになれる薬</a>
">スモールライト</a>
">ずらしんぼ(道具)</a>
">3Dゲーム</a>
">刷り込み製本機</a>
">刷り込み卵と消去ヘルメット</a>
">スリル線香</a>
">スリルチケット(道具)</a>
">スリルブーメラン(道具)</a>

ほぼ道具になりましたね。まだいらない文書があります。

手順4 文字列の置換(sed)

sedコマンドは文字列を置換する事が出来ます。

$ curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7 | grep "<li>.*</.*>" | grep -o '">.*</.*>' | sed 's/">//g'

追加されたコマンド(sed 's/">//g')は "> を消去しています。

実行結果(途中を抜粋)

スポーツマンになれる薬</a>
スモールライト</a>
ずらしんぼ(道具)</a>
3Dゲーム</a>
刷り込み製本機</a>
刷り込み卵と消去ヘルメット</a>
スリル線香</a>
スリルチケット(道具)</a>
スリルブーメラン(道具)</a>

で、さらに(道具)などトゥートに必要ない文字を置換(削除)します。

$ curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7 | grep "<li>.*</.*>" | grep -o '">.*</.*>' | sed 's/">//g'| sed 's/(.*)//g' 

追加されたコマンド(sed 's/(.*)//g') は(〜〜〜)を削除します。

実行結果(途中を抜粋)

スポーツマンになれる薬</a>
スモールライト</a>
ずらしんぼ</a>
3Dゲーム</a>
刷り込み製本機</a>
刷り込み卵と消去ヘルメット</a>
スリル線香</a>
スリルチケット</a>
スリルブーメラン</a>

最後に</a>を〜に置換します。

$ curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7 | grep "<li>.*</.*>" | grep -o '">.*</.*>' | sed 's/">//g'| sed 's/(.*)//g' | sed 's/<\/a>/〜/g' 

追加されたコマンド(sed 's/<\/a>/〜/g')  は</a>を〜に置換しています。

実行結果(途中を抜粋)

スポーツマンになれる薬〜
スモールライト〜
ずらしんぼ〜
3Dゲーム〜
刷り込み製本機〜
刷り込み卵と消去ヘルメット〜
スリル線香〜
スリルチケット〜
スリルブーメラン〜

これで処理は終わりです。

手順5 ファイルに保存

処理した結果をファイルに保存しないと意味がありません。

手順1で作ったファイルに保存します。

$ curl http://ja.doraemon.wikia.com/wiki/%E9%81%93%E5%85%B7%E4%B8%80%E8%A6%A7 | grep "<li>.*</.*>" | grep -o '">.*</.*>' | sed 's/">//g'| sed 's/(.*)//g' | sed 's/<\/a>/〜/g' >> tool_list.txt

これにて終了でござんす。

感想

どうでしたか?コマンド多すぎてキモってなった方がほとんどじゃないでしょうか。

正直"理解して欲しい"というよりは"こういうのがあるんだー"と思って欲しい所存でございます。

もし気になった人がいればこちらの本をオススメします。

アルバイトでExcelをいろいろな方に教えていますが、正直Excelは効率が悪いので嫌いですねー

世のサラリーマンが夜な夜なExcelでやっているような作業はほとんどシェル芸で一瞬で出来てしまいます。知っていると知っていないとでは大きな差です。

ちなみに今回のシェル芸はシェル芸人(プロフェッショナルな変態)にかかればもっと短くなると思います。こんな長いシェル芸糞だーと別回答を添えてコメントして頂けるとありがたいです。

以上見習いシェル芸人のオーカワでした。

The following two tabs change content below.

オーカワ

大学4年生。ロボット勉強中!!
オーカワのページ 連絡先: okawa@routecompass.net