【問題】第15回ドキッ!grepだらけのシェル芸勉強会

Pocket
LINEで送る

イントロのスライド

諸注意

解答はUbuntu Linux 14.04で作成しました。コマンドがないときは適宜インストールのほど。

Macな人はbrewでGNU grep(ggrep)をインストールすると良かれ悪しかれ拡張オプションが使えます。インストール方法は例えばこちらが分かりやすいかと。3行で済みます。

Q1

次のようにファイルを作ります。

$ seq 2 5 > a
$ seq 1 9 > b
$ seq 5 11 > c
$ seq 3 6 > d

1という文字を含まないファイルを列挙してください(aとdですね)。

Q2

作業ディレクトリを作り、その下に次のようにfile.1〜file.10000というファイルを作ります。

$ seq 1 10000 | xargs -I@ touch file.@

以下の数字を持つファイルだけ残して後のファイルを消去してください。

  • 1〜9
  • 10, 20, 30, …, 90
  • 数字の下2桁が0のファイル

Q3

次のテキストから、「-v」、「-f」、「awk」の数をカウントしてください。gawk、nawkは避けてください(awkの数としてカウントしない)。できる人はgrepは1個で。さらにできる人は拡張正規表現を使わないでやってみましょう。

$ cat text1 
awk -v v="hoge" 'BEGIN{print v}'
echo 'BEGIN{print 1}' | gawk -f -
nawk 'BEGIN{print " BEGIN{print x}"}' | awk -v x=3 -f -

Q4

/etc/の下(子、孫、・・・)のファイルのうち、シバンが「#!/bin/sh」のシェルスクリプトについて、中に「set -e」と記述のあるファイルとないファイルの数をそれぞれ数えてください。(コメント中のset -eも数えてOKです。)

Q5

日本語やギリシャ文字のある行を除去してください。

$ cat text2 
A pen is a pen?
日本語でおk
ΩΩπ<Ω< na nandatte!!
Randy W. Bass
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
#危険シェル芸

Q6

次のようにファイルa, b, cを作ります。

$ echo 1 2 3 4 > a
$ echo 2 3 4 5 > b
$ echo 1 4 5 > c

ファイルの中の数字を足して10になるファイルを挙げてください。

Q7

psコマンドを打って(オプションは任意)、そのpsコマンドの行、親プロセスの行、親の親のプロセスの行を表示してみてください。

Q8

seqとfactorの出力の後ろにgrepだけをいくつかつなげて、「素数の一つ前の数で、かつ10以上の数」を列挙してください。

$ seq 10 1000 | factor | ...(grepだけ)
Pocket
LINEで送る