はじめに
コマンドラインからブログでもQiitaでもなんでも良いですが、何かの文章をポストするっていうのは、意外と簡単なので、そういった仕組みづくりというのをやっておくと便利だと思います。
何か調べものがある時、わざわざブラウザを開いて、コピーして、エディタに、メモしてという手順は、CLIないしは、CUIユーザーとしては非常に面倒なことの一つだったりします。今回は、そんな時に役立つ個人的なTipsを幾つか紹介したいと思います。
ちなみに、CLI(コマンドラインユーザーインターフェース)とCUI(キャラクタユーザーインターフェース)と言うのは、ここではほぼ同じ意味で使用しています。つまり、黒い画面ってことでイメージしてもらえればいいわけですが、具体的には、端末(ターミナル、Terminal)でやるってことですね。私は、CUIって言うことが多いかなあ。GUIと対で使えるので。タイトルはCLIを使ってますが。
Webから文章を抜き出そう
Webから欲しい文章を取ってくるには、html2text
というPython製のツールが非常に便利です。これは、HTMLをテキスト形式にして表示してくれるものです。したがって、wget
, curl
の出力をそのまま使える形にできますので、お手軽なのです。
$ pip install html2text
$ curl -sL http://qiita.com/syui/items/ab6a11aa57df8590d645 | html2text
文章を抜き出すには、peco
を使います。golang製のツールですが、欲しい出力を選択できます。
$ go get github.com/peco/peco/cmd/peco
$ curl -sL http://qiita.com/syui/items/ab6a11aa57df8590d645 | html2text | peco
ちなみに、peco
とかhtml2text
は非常に使いやすいものなので、global aliasなどを設定しておくといいかもしれません。
alias -g P='|peco'
alias -g H='|html2text'
alias -g J='|jq'
これで、以下のようにすると使えます。
# ls -A | peco
$ ls -A P
必要な形式にして出力しよう
JSONでメモをとっている人などは、jq
が便利です。個人的には、Qiitaのポストとか、ブログへのポストもすべて、JSONでとったメモを自動的に所定の形式にして作ったり、ポストしたりしているわけですが、例えば、こんな感じで記事を作り上げていきます。
$ sudo pacman -S jq
json
やjq
は慣れれば簡単ですが、慣れないと最初は、なかなか使いにくいと思います。一応、参考になるコマンドを幾つか紹介。こんな感じで値を取り出せます。
[
{
"title": "json",
"tags": [ { "name": "json" }, { "name":"text"}, { "name":"golang"}, { "name":"html"}, { "name":"python"} ],
"body": "hello world",
"coediting": false,
"gist": false,
"private": false,
"tweet": false
}
]
# 全体の値を取り出す
$ cat hoge.json | jq .
# 変換しないで値を取り出す、括弧"を取り除く
$ cat hoge.json | jq -r .
# 括弧[]内をとりあえず取り出す
$ cat hoge.json | jq '.[]'
# 括弧{}の順番で番号指定して取り出す
$ cat hoge.json | jq '.[0]'
# 括弧{}内のtitleの値を指定して取り出す
$ cat hoge.json | jq '.[].title'
$ cat hoge.json | jq '.[]|.title'
# 括弧[]内の値だけ括弧"を除き、すべて取り出す
$ cat hoge.json | jq -r '.[]|.[]'
# tagsをすべて取り出す
$ cat hoge.json | jq '.[].tags|.[].name'
# tagsの個数を指定して取り出す
$ cat hoge.json | jq '.[].tags|.[1,2].name'
検索して必要な部分を抜き出す
時に検索して必要な文章を取り出したい時があります。そんな時は以下のようなスクリプトを作っておくと便利です。
$ ./search.sh arch linux json
という感じで使います。
# !/bin/zsh
startpage="https://startpage.com/do/search?q="
case $1 in
*)
if [ ! $# = 0 ];then
keyword=${startpage}`echo "${@}"|tr ' ' '+'`
echo $keyword
one_step=`curl -sL ${keyword} | html2text | grep '###' | peco |cut -d"(" -f2 | cut -d")" -f1`
two_step=`curl -sL ${one_step} | html2text | peco`
case $OSTYPE in
darwin*)
echo "$two_step"| pbcopy && pbpaste
;;
linux*)
echo "$two_step"| xclip -i -sel c && xclip -o -sel c
;;
esac
else
echo '
g <hoge> : google.com/search?q=<hoge>
'
fi
;;
h|-h|-[hH]elp|--[hH]elp)
echo '
g <hoge> : google.com/search?q=<hoge>
'
;;
esac
'