Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

bash

extglobの正規表現におけるオプションについて

shuzo-kino.hateblo.jp の補足のような内容です。 用意されている正規表現オプションは @:一回だけ *:ゼロ回以上 +:一回以上 ?:ゼロまたは一個 !:これらに一致しないもの 実際のところ ためしに、"@"をつかって正規のjpgだけ引っ張ってくるケースを考えます…

Bash環境において"$_"は最後にマッチした変数を拾う

Bash環境において"$_"は最後にマッチした変数を拾います。 実際のところ 以下のようなコマンドを叩いたとします。 $ mv ~/tmp/hoge /Users/shuzo_kino/dev/src/ $ cd $_この時、"$_"がマッチするのはどっちでしょうか? ……正解は後者。 これならmvした後に移…

"-bash: bash: command not found"なんて出てきたら、PATH変数がおかしな事になっている

業界ン年目でこんな初歩中の初歩に引っかかるとは思いませんでした。 再起動かけて一切のコマンドを読まなくなったら、PATH変数がやられてます。 参考もと 環境変数を弄って再起動をかけたところ "-bash: bash: command not found" なんてエラーが。 lsやnan…

sortコマンドの"-k"オプションで降順にしたり数値順にしたりする

sortコマンドの"-k"オプションではソート方法について指定ができます。 加えて、数珠繋ぎにできるので複雑なソートも可能です。 実際のところ 3番めのキーで昇順にソート、次いで1番目のキーを降順にソートという処理は以下の通り。 $ sort -t , -k 3 -k 1…

sortコマンドでcsvファイル……やtsv的な謎独自ファイルの処理を行なう

実際のところ こんなデータがあったとします。 $ cat data.csv hello,2,ab yeah,0,ab foo,1,ab bar,3,cd区切り文字を","、三番目のカラムをソートする場合 $ sort -t , -k 3 data.csv foo,1,ab hello,2,ab yeah,0,ab bar,3,cd区切り文字を","、一番目のカラ…

OpenSSLでmd5のハッシュ値を出す

OpenSSLでmd5のハッシュ値を出す方法です。 苦労してダウンロードしたUbuntuのイメージファイルが破損してないか調べたり、 テストツールで出した画像を比較したりする時に使えます。 実際のところ 同じテストファイルから、それぞれ別のタイミングで生成し…

catコマンドの行数表示オプション

考えてみりゃ当然なのですが……catにも行数を表示するオプションがあります。 実際のところ そのままズバリ"-n"です。 $ cat -n tmp.txt 1 France 12 "UTC−10:00 — most of French Polynesia 2 UTC−09:30 — Marquesas Islands 3 UTC−09:00 — Gambier Islands …

bashで自爆カウンターめいたものをつくる

bashで自爆カウンターめいたものをつくる 実際のところ whileループでタイマーをぶん回してます。 #!/bin/bash i=666 while true do printf "\r0x%03X" i=$(expr $i + 1) done別パターン。 letのインクリメントを使います。 見た目からして明らかにコッチの…

Bash文字列のN番目を取り出す

Bash文字列のN番目を取り出す方法です。 軽量言語ならアリそうな機能ですが、まさかBashにもあったとは 実際のところ こんな変数を想定しておきます $ let sp="1234" 先頭一個だけ捨てる $ echo ${sp:1} 234 二番目を取り出す $ echo ${sp:2:1} 3 先頭3コを…

シェル変数文字列の長さを調べる

シェル変数文字列の長さを調べるには ${#VAL_NAME}です。 実際のところ 文字列を作って、その長さを調べます。 $ let sp="1234" $ echo $sp 1234ここまでは普通ですね。 ここで、上の方の通り変数名を中括弧で括ってシャープをつけたると…… $ echo ${#sp} 4…

【自習メモ】プログレスバー的な文字増減をする場合、先に全部生成してsedで弄ったほうが早い……こともある

timeコマンドはスクリプトの実行時間を計測する子です。 以前記事化した事もありましたね。さて、前回の記事でやったプログレスバーの部分について ちょっと前に読んだ本に「sedは十分高速だから極力sedでやれ」とか書いてあったような事を思い出し…… 試しに…

bashでプログレスバーを実装してみる

bashでプログレスバーを実装してみます。 実際のところ まぁ、考えてみればカンタンな話で……改行せずにガンガン上書きしてやりゃ良いだけですね。プログレスバーは昔の記事のyesを使うバージョンでやりました。 shuzo-kino.hateblo.jp #!/bin/bash function …

bashスクリプトの中で関数をつくる

自前のやっつけスクリプトも使用頻度が上がってくるとメンテしたくなるもの 半年後に見返した時、どこで役割が分かれてるかわかんないなんて悲惨なケースもありえますし というわけで、今回はbashスクリプト中で関数を定義する方法です 実際のところ #!/bin/…

cURLでレスポンスコードだけ見る

shuzo-kino.hateblo.jp 以前の記事では、レスポンスヘッダを丸々みる方法を紹介しました。ただ、状況によっては過剰でしょう。 実際のところ たとえば、example.orgというリンクが存在しているか確認したい場合です。 上記の記事通りやると以下のようなりま…

バイナリファイルをHEX文字化してローカルに保存

xxdコマンドをつかうと、バイナリファイルをHEX文字化することができます。 そのままファイルとしてローカルに保存する事も可能です。 実際のところ ここで大活躍するのがxxdコマンド。 $ xxd -p image.jpg | tr -d '\n' > dump.hexオプションpは以下にある…

Makefileの".PHONY"という記法について

実際のところ makeコマンドを使って、不要なtxtファイルを一掃するコマンド"clean"を作りたいとします clean: rm -r *.txtところが、このシステムにはとある事情でcleanという同名のファイルがありました $ ls Makefile clean hoge.txtこれでは、コマンドを…

【ネタ】"echo f o{,,} b a r"ってやったら、どうなると思います?

$ echo f o{,,} b a r f o o o b a r中括弧の中身を数値に変えると $ echo f o{2} b a r f o{2} b a r 奇妙な事に、man echoしてもこの構文に関する話は一切でてきません。 参考もと ……なんかもうこれでいいような気がしてきた。 echo す も{,,,,,,,} の う …

rbenv環境下でgem系に付随するツールが上手く動かないなら、.ruby-versionが悪さをしているかも……

今回もショーもない話ですが、結構ハマったのでメモpassengerには、諸々の設定を確認するツールがあります。 $ passenger-configところがぎっちょん、このツールが半端に認識されて上手く動きません。 sudoの権限でやってみろ等々のネットの指示を全部見ても…

CLI上に時間ごと天気図(気温、雨量、風向)を表示する

公的情報とfingerコマンドの合わせ技で、CLI上に時間ごと天気図(気温、雨量、風向)を表示する事ができます。Awesome: The Norwegian Meteorological Institute provides a CLI for weather reports.$ finger <city>@graph.no#fb pic.twitter.com/879CWw6m53— İhs</city>…

Shellスクリプトで特定の曜日/日付で発生する分岐をつくる

dateの結果を変数展開する事で、特定の曜日に発動する処理を作る事ができます。 cronなんかでは特に有用ですね。 実際のところ 月曜日の場合だけ「hello」と出すBashスクリプトは以下の通りです。 LANG=Cをしとかないと、日本語環境では動かなかったりするの…

shoptコマンドでbashの機能を拡張する

shoptコマンドはbashの秘められた性能を解放します。 実際のところ オプションなしでコマンドを実行すると、解放可能なもののリストが表示されます。 $ shopt cdable_vars off cdspell off checkhash off checkwinsize on cmdhist on compat31 off dotglob o…

extglobでBashスクリプトでも正規表現

extglobでBashスクリプトでも正規表現を実現できる拡張です。 実際のところ 読み込む前に $ shopt -s extglobとやると、extglobを有効にできます。これにより、「一個以上の空白」を実現したいならば +([[:space:]])とかいう気色の悪い記法を実現可能となり…

Bash用特殊変数$REPLYで空白を消す

“$REPLY”はreadコマンドなどで使うBash独自の特殊変数で、 $ while read; do echo “$REPLY”; done < textileのような感じで使います。 ちょっと変わった用途として、 $ while read REPLY; do echo “$REPLY”; done < textileとしてあげると$IFSが適用され 行…

環境変数を通さないと動くスクリプトも思った通りに動かない

導入したてのPCではありがちなポカで、今回まさにやらかしたのでメモ。bashを利用している場合、その環境変数は"bash_profile"か".bashrc"に保存されます。 より深いものに/etc/profileなんてのもあります。 GNU総本山によれば、 /etc/profile bash_profile …

sedで特定範囲のみに正規表現を適用する

sedで特定範囲のみに正規表現を適用する場合、 範囲を指定した上でいつものように正規表現をあてます。 実際のところ 101,Hyōgo,Takarazuka,"225,587","219,862",2.6,39.3,"5,740",Special city 102,Kanagawa,Atsugi,"224,426","222,403",0.91,36.2,"6,200",…

sedで最初と最後の行を表示する

$ seq 10 20 | sed -n '1p;$p' 10 20あたま数行を出したいだけなら、カンマ区切りで切れば良いです。 末尾数行ってのはやや苦しい感じです $ seq 10 20 | sed -n '1,3p' 10 11 12 参考もと sed -n '1p;$p' # Print the first and last line of stdin.— Comma…

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その7:grep

gr8のgrepメソッドはlazyでgrepコマンドとawkを合わせた挙動を同時に実行できます。 $ ls | gr8 'grep(/(.+)(\.png)$/) {|s| printf "cp %16s %16s", "#{$1}.png", "img/#{$1.upcase}.jpg"}' cp ceo.png img/CEO.jpg cp system_sol.png img/SYSTEM_SOL.jpg$ …

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その6:ライブラリの読み込み

gr8でも、Ruby製ライブラリを読み込むことができます。 ライブラリを読み込むには-rオプションです。 今回はgems.rbてな感じの名前でactive_supportと、自作メソッドを取り込んだファイルを作成します。 ## $ cat gems.rb require 'active_support' require …

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その5:クォテーション

出力結果にクォテーションを出したい場合、qメソッドか、qqメソッドをつかいます。 実際の所 qメソッド:シングルクォテーション $ cat data | gr8 -F "map{self[0].q}" 'Haruhi' 'Mikuru' 'Yuki' qqメソッド:ダブルクォーテーション $ cat data | gr8 -F "…

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その4:-Fで分割文字を

Fオプションをつかうと、分割文字を指定できます。 実際の所 $ cat data Haruhi!100 Mikuru!80 Yuki!120てな形にした場合、「-F"!"」てな感じで指定してあげます。 selfに配列形式で格納されています。通常のRuby配列の通り、0始まりです。 $ cat data | gr…