先日行われたシェル芸勉強会でそういった問題が出てたのだけど、絵文字をすべて削除したり置換する方法って今後使うこともありそうなので、これだけ抜き出して記述しておくことにする。

Perlを使う場合

Perlの場合、Unicode Propitiesというのがあるので、それで絵文字として指定…できればよかったんだけど、残念ながらそのブロック単位では無いらしい。 もうちょっと小さい単位で定義されているので、こういうときに一発で指定が出来ない。なので、使う文字ブロックだけを指定してやるとよさそうだ。

command ... | perl -C -ple 'use utf8;s/[^\p{BasicLatin}|\p{Katakana}|\p{Hiragana}|\p{Han}|\p{CJKSymbolsAndPunctuation}|\p{HalfwidthAndFullwidthForms}]//g'

先日実施された、第42回シェル芸勉強会に参加してきたので、その復習。
今回は難しめにしたとのこと。

問題はこちら。最初に、問題等に使用するファイルをgitからcloneしておくといい。(といっても、ファイルは1個しかない)

git clone https://github.com/ryuichiueda/ShellGeiData

Q1

「正の整数の組(x, y, z)について、x + xy + xyz = 1234, x < y < zを満たす組み合わせを全て選べ」という問題。 数学オリンピックから出題されていた問題をちょっと改変した問題らしい(多分オリジナルはこれ)...


最近は、Goで自作してる sshクライアントコマンド(lssh) の機能追加を主にやってる(で、こっちあまり更新してない(´・ω・`))。

実はちょっと前、下のようなツールを見かけて、それと同じようなことが自作のsshクライアントやりたいと思って機能追加していたのだけど、それがやっとできるようになった。 これが何なのかというと、sshで複数のノードにパラレル接続して、そのままプロンプト上からインタラクティブにコマンドを流せるというツールで、便利そうだしすごくかっこよさげなのだ。

An interactive parallel ssh client featuring autocom...


Golangで、パイプからの標準入力を受け付けつつ、さらにキーボードからの入力を別に受付させたいということがあった。 で、前に シェルスクリプトの場合だと/dev/ttyから受け付けすることができる 、という内容について記述したことがあったが、それと同じようにすることで実現できるようだ。

sample_keyinput_and_pipe.go
package main import ( "fmt" "io" "log" "os" "time" "golang.org/x/crypto/ssh/terminal" ) fun...

自作のsshクライアントコマンドで~/.ssh/configを読み込んで処理させる機能を追加したかったのだが、ProxyCommandがネックになっていたため今まで実装を見送っていた。 で、久しぶりになんか情報ないかなと探してみたところ、net.Pipe()を利用したら処理できるという情報を見かけた。

ProxyCommandはローカルで実行するコマンドになるので、そのコマンドの出力をPipeで繋げていけばいいようだ。なるほど…(´・ω・`)。 というわけで、さっそく実装してみた。こんな感じのコードで.ssh/configから指定したホストの情報を取得して、かつProxyCommand...


先日、Twitter眺めてたらそんな感じの処理について見かけたので、楽に実現する方法について考えてみる。

1. tarでディレクトリだけを固める

別々のホスト間で処理する場合、tarでディレクトリだけを固めてしまい、コピー先でそれを展開するという方法が楽そうだ。

cd SourceDir;find ./ -type d -print0 | xargs -0 tar czvf dir.tar.gz --no-recursion # dir.tar.gzにディレクトリだけ固める
cd TargetDir;tar xzvf dir.tar.gz # コピー先にtar.gzを持っていって展...