sed起きるとそこは雪国だった。寒さに負けて引き篭もっていたいが、電車に乗るため駅へと向かうのであった。目的地はシェル芸勉強会の福岡サテライト会場。今回の会場はベータソフト様会議室を使わせていただいた。今回はのべ8人の有志がサムサニマケズ集った。参加者の方にsedの習熟度を聞いて見たのだが、それほど使い込んでいない方が多いようだ。そこで福岡サテライト会場では、午前の部を独自に進めることにした。午後からのsed問題に備えて、sedの基礎知識から中級編のネタについて話をした。pの繰り返しで倍々ゲームsedでFizzBuzzApacheログファイルの日時正規化その他シェル芸勉強会やTwitterで流れたsedの面白ネタ。一通りsedの機能について話をした後、sedの元になったedの簡単なデモを行った。grepの名前の語源とコマンドについても説明した。23456789sedのパターンスペースとホールドスペースの図解はこちらを参照のこと。参加者みんなで近くの餃子の王将へ。途中で世界的に有名になった「博多の大穴」が出来ていた横断歩道を渡っていった。事故やけが人がいなかったのは本当に良かったと思う。ここが世界的に有名になった「博多の大穴」が開いた場所。勉強会の会場近くです。昼食を食べながら、仮想化やクラウド化が進み利便性が向上したが、教育という面では逆に難しくなった面もあるかもねーみたいなお話をした。抽象度が上がると入門者にとっては難解になってしまう面も否めないということ。午後の部が始まる前に、イントロのスライドで話をさせていただいた。言いたいことは一つ、勉強会に興味を持ってもらってありがたいということだ。speakerdeck.comいよいよsed地獄?の始まりである。午前中にsedの話をしておいてよかった。話をしていなかったら参加者の大半が死亡していたことだろう・・・今回の問題と解答は下記を参照してほしい。sedはgsedコマンドになっているので注意。Linuxの人はsedに読み替えること。Q1一文字ずつ飛ばしてアルファベットを大文字に変換する問題。これは参加者の方から解答が出た。大文字へ変換する\Uに後方参照を組み合わせて\U\2のようにすれば出来るとのこと。!会長の解答と同じである。Q2やっぱり出たか、sedでFizzBuzz。Buzz.....Q33行目を7行目の下に移動。下記のような解答を出したが、まあ会長の解答とほぼ同じ。今回の場合は最後の7gは7xでも良かった。'3h;3d;7p;7g'12456738910Q4c++のソースファイルをコンパイル可能にしろというお題。関数宣言する前に関数を使ってるため、目的の関数をmain関数の前に移動しろということ。解答は会長と同じなので割愛。Q52行ずつ入れ替えろというお題。参考のためsedを使わない解答を先に出しておいた。121436587109次の行に移動するnコマンドやホールドスペースを使う必要がありそうだが、結局下記のようなのしか出来ずギブアップ。'h;n;G'1213435657879109会長の解答を見たら、奇数行と偶数行で処理を分けて考えればいいみたいだ。会長が解答を更にシンプルしたものを出していたので下記に記載しておく。ホールドスペースをパターンスペースに追記する処理については、偶数行の指定は不要みたいだ。'1~2{h;d};G'21436587109Q6会長の解答とほぼ同じ。sedのラベル機能を使った繰り返し処理。head1111111111111111111111111111111111111111111111111111111上記はheadコマンドで強制的に10行ぶった切りしているが、会長の解答でラベルを使った繰り返し処理でbコマンドを使うと繰り返し条件が書けるというのは勉強になった。これは便利そうである。ちなみにラベルを使った繰り返しでtコマンドも使える。これはsコマンドを使った置換が成功する間繰り返す。Designの共同執筆中に起きた事件が元らしい。@ebanさんによるsedのラベルを使った繰り返し処理の解答が出てきて「ナンダコレワ??」と執筆陣の間で戦慄が走ったのであった・・・Q7縛り1の解答は会長と同じ。sedのeコマンドで解決。縛り2の解答はギブアップ・・・10回の繰り返しを数字を使わず指定するにはheadコマンド使えば良さそうなのだが??でsedに行数を表示する=というコマンドがあるということを知った。Q8上側半分を作るのはQ6と同じ。後半をどうするか?ラベルを2つ使ったループで解答した。p;s/.$//;/^.$/!bLOOP2'111111111111111111111111111111考え方を変えると、前半の出力をひっくり返してケツに追加する問題。いうことでsedのGとhコマンドを繰り返して、行を逆順にしていく技の応用になる。解答は会長の解答を参照のこと。行順をひっくり返すtacコマンドの動きをsedでやる件については、大阪サテライト会場担当のid:kunst1080さん記事を参照のこと。午後の部終了後、軽く問題のおさらいをしておいた。その後仮想端末のtmuxについて話をした。言ってもまだ使い始めたばかりなのだが。speakerdeck.comtmux起動時に自動的にWindow作成やpane分割、コマンド実行など出来るのか、確認したい。コピーモードやスクロール操作がまだ理解出来ておらず。今回は午前中にsedの話をしておいてよかった。話す内容をある程度まとめておいたので、スムーズに話が出来たと思う。福岡サテライト会場ではサポートが重要なので、今後も午前中はどういうやり方がいいか試行錯誤していこう。参加者の方々は、自分なりのペースで何かを掴んでいってもらえれば幸いである。輪が広がってサポートする側に回れるようになってもらえれば。はてなブログPro情報処理ってもっとシンプルにならないだろうか?PKI関連、RubyやPHP等のLL、シェルスクリプト、シェル芸、ユニケージ見習い未満。シェルスクリプトとシェル芸はきっと違うんですよ。JPはてなブログをはじめよう!papiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。