「シェル芸爆破デスマッチ勉強会」に参加してないのに解いてみた

■幽霊部員なので、今回は参加してません。
 私の解いたのは以下の分だけです。

 USP友の会会長が出題した前半戦を解いてみた。
 http://d.hatena.ne.jp/labunix/20121111

 USP友の会会長が出題した後半戦を解いてみた。
 http://d.hatena.ne.jp/labunix/20121112

 第2回チキチキ! シェル芸人養成勉強会 参加報告
 http://d.hatena.ne.jp/labunix/20121209

■今回は解答もあるようです。

 20130216 シェル芸爆破デスマッチ勉強会
 http://www.slideshare.net/ryuichiueda/20130216-16574641

 以下、「※」の箇所は私のコメントです。

■問題1	携帯電話の番号にハイフンを入れてみましょう。

$ echo "09011112222
08098769876
09022221111" | sed s/"\(...\)\(....\)\(....\)"/"\1-\2-\3"/g
090-1111-2222
080-9876-9876
090-2222-1111

■問題2	整形してハイフンを入れましょう。
 ※整形したい理由が分からないのだが。。。

$ echo "09011112222
08098769876
09022221111" | sed s/"^0901"/"&-"/ | \
  sed s/"0809"/"電話番号:&"/ | \
  sed s/"090\(2...\)\(....\)"/"\+81-90-\1-\2"/
0901-1112222
電話番号:08098769876
+81-90-2222-1111

■問題3 100行に水増ししてください。できればsedだけで。
 ※101行になるのでtailで。。。

$ echo "ああああああああああああ!" | \
  sed s/".*\$"/"&&&&&&&&&&"/g | \
  sed s/".*"/"&&&&&&&&&&"/g | \
  sed s/""/"&\n"/g | tail -100 | wc -l
100

■問題4 カンマ、句点を全て全角の句点に変換してください。
 ※フォントによっては分かりにくいよね。

$ echo "働けど、働けど,我が暮らし、楽にならず,JITコンパ イラ。" | sed s/",\|"/""/g
働けど、働けど、我が暮らし、楽にならず、JITコンパイラ。

■問題5 次の変換を行ってください。
 ※最後のドットは空白を分かるようにするため。

$ echo '\ ダッダーン\_!_ボヨヨン\_ボヨヨン_' | sed s/^\/"-&"/ | sed s/"\\\_\|_"/" "/g | sed s/"\$"/"."/g
-\ ダッダーン ! ボヨヨン ボヨヨン .

■問題6 文字数を数えてください。

$ echo "あいうえお
かきくけこ" | sed s/"."/"&\n"/g | grep -v "^\$" | wc -l
10

■問題7 シバンを全て「#!/usr/local/bin/bash」に変更してください

$ echo '#!/bin/bash
echo hoge' > a.sh;cp a.sh b.sh;cp a.sh c.sh

$ sed -i s%'#!/bin/bash'%'#!/usr/local/bin/bash'%g [abc].sh
$ grep . [abc].sh
a.sh:#!/usr/local/bin/bash
a.sh:echo hoge
b.sh:#!/usr/local/bin/bash
b.sh:echo hoge
c.sh:#!/usr/local/bin/bash
c.sh:echo hoge

$ ls [abc].sh
a.sh  b.sh  c.sh
$ ls [abc].sh | xargs rm -f
$ ls [abc].sh
ls: cannot access [abc].sh: そのようなファイルやディレクトリはありません

■問題8 table中のデータをスペース区切りで抜き出してください。

$ echo -en "<table>\n\t<tr>\n\t\t<td>a</td><td>b</td>\n\t\t<td>c</td>\n\t</tr>\n\t<tr>
\n\t\t<td>1</td><td>2</td>\n\t\t<td>3</td>\n\t</tr>\n</table>\n" | \
  sed s/"\t"//g | sed s/"<"/"\n&"/g | sed s/">"/"&\n"/g | grep -v "^\$\|^<" | xargs echo -n;echo
a b c 1 2 3

■問題9 Aliasを解除してください。
 ※私の環境では元々「alias」は無いが、すべて削除するなら1個でも10個でも100個でも同じ。

$ alias | wc -l
0
$ alias rm='rm -i'
$ alias | wc -l
1
$ alias
alias rm='rm -i'
$ unalias -a
$ alias | wc -l
0

■問題10 以下の部分だけ抽出してください。

$ echo -e '%%1%%\n\t私はだれ?\n%%2%%\n\tナタデココ\n%%3%%\n\tここはどこ?\n%%4%%\n\tなかったでココに。\n%%5%%' | \
  grep -A 1 "%%[13]" | grep -v "^\-\|^%"
        私はだれ?
        ここはどこ?

■延長戦 精度よく足してください
 ※普通に足すと、これは酷い。

$ echo "0.1243532523523
-1251.331
3151353" | xargs echo -n | sed s/^/"(+ "/ | sed s/"\$"/")"/ | clisp -q ;echo
[1]>
3150101.8

$ echo "0.1243532523523
-1251.331
3151353" | awk '{sum+=$0}END{print sum}'
3.1501e+06

 ※bcに渡す前のawkは必須。

$ echo "0.1243532523523
-1251.331
3151353" | xargs echo -n | sed s/" "/"+"/g | sed s/"+-"/"-"/ | awk '{print}' | bc;echo
3150101.7933532523523