Más contenido relacionado
La actualidad más candente (12)
Similar a 20131102 第7回シェル芸勉強会 (8)
20131102 第7回シェル芸勉強会
- 8. 今回の内容
• 問題10問
– マニアックオプション大会
– 簡単な文章いじり(ブログが盛り上がったので追加)
2013/11/2
第7回シェル芸勉強会
8
- 9. 注意
• 解答例は
Mac
で作成
• Linux
の人は
gawk,
gsed,
tail
-‐r
等々を適宜 awk,
sed,
tac
に読み替えのこと
• その他環境でも、解答例にこだわらずネット等を
調べながら解答願います。
• 解答では、例題が解ければよい。
– 一般解を探すのは、場合によっては悪い癖となる。
2013/11/2
第7回シェル芸勉強会
9
- 11. 解答
• $
sort
-‐t.
-‐k1,1n
-‐k2,2n
-‐k3,3n
-‐k4.4n
ip
• $
cat
ip
|
tr
'.'
'
'
|
sort
-‐k1,1n
-‐k2,2n
-‐k3,3n
-‐k4,4n
|
tr
'
'
'.'
2013/11/2
第7回シェル芸勉強会
11
- 13. 解答
• $
echo
このtaxiは1kmあたり10000円 |
sed
's/[a-‐z0-‐9][a-‐z0-‐9]*/
&
/g'
• $
echo
このtaxiは1kmあたり10000円 |
gsed
's/[a-‐zA-‐Z0-‐9]+/
&
/g'
2013/11/2
第7回シェル芸勉強会
13
- 15. 解答
• $
echo
私の名前は space
invader
です。4
歳です。 |
sed
's/
space/space/'
|
sed
's/der
/der/'
|
sed
's/4
/4/'
• $
echo
私の名前は space
invader
です。4
歳です。 |
sed
's/([^a-‐zA-‐Z0-‐9])
([a-‐zA-‐Z0-‐9])/12/g'
|
sed
's/([a-‐zA-‐Z0-‐9])
([^a-‐zA-‐Z0-‐9])/12/g'
• $
echo
私の名前は space
invader
です。4
歳です。 |
sed
's/([^[:alnum:]])
([[:alnum:]])/12/g'
|
sed
's/([[:alnum:]])
([^[:alnum:]])/12/g'
2013/11/2
第7回シェル芸勉強会
15
- 17. 解答
• $
echo
'(略)'
|
grep
-‐o
'<b>hoge</b>'
|
sort
|
uniq
–d
• $
echo
'(略)'
|
grep
-‐o
'<b>[^<]*</b>'
|
sort
|
uniq
–d
• grep
–o
なし
– $
echo
'(略)'
|
gsed
's/<b>/n&/g'
|
gsed
's;</b>;&n;g'
|
grep
'^<b>'
|
sort
|
uniq
-‐d
2013/11/2
第7回シェル芸勉強会
17
- 19. 解答
• $
seq
-‐w
1
20000
|
xargs
touch
• $
seq
1
20000
|
awk
'{prinj("%05dn",$1)}'
|
xargs
touch
• Tukubaiを使用した例
– $
seq
1
20000
|
maezero
1.5
|
xargs
touch
2013/11/2
第7回シェル芸勉強会
19
- 21. 解答
• 問題a
– $
ls
-‐f
>
/tmp/list
• 問題b
– $
pme
rm
–Rf
<ディレクトリ>
– $
pme
echo
*
|
xargs
rm
– $
ls
-‐f
|
xargs
rm
(ただしエラーが出る)
– $
ls
-‐U
|
xargs
rm
2013/11/2
第7回シェル芸勉強会
21
- 22. 問題7
• 右下の図のようなディレクトリ、ファイルを作り、
例えば
./a/001
なら
./a_001
./b/c/123
なら
./b_c_123
のようにパスの「/」を
アンダースコアに変えて、
./
にコピーを置いてください。
– できる人はwhileやfor
を使わないで
2013/11/2
第7回シェル芸勉強会
22
- 23. 解答
• $
find
.
-‐type
file
|
sed
's;./;;'
|
while
read
f
;
do
cp
$f
$(echo
$f
|
sed
's;/;_;g')
;
done
• $
find
.
-‐type
file
|
sed
's;./;;'
|
gawk
'{print
$1,gensub(///,"_","g",$1)}'
|
xargs
-‐n
2
cp
• 会場から
– $
find
.
-‐type
file
|
sed
's;./;;'
|
gawk
'{print
"cp",
$1,gensub(///,"_","g",$1)}'
|
sh
2013/11/2
第7回シェル芸勉強会
23
- 25. 解答
• $
grep
–c
-‐r
foo
/etc
2>
/dev/null
• $
grep
-‐r
foo
/etc
2>
/dev/null
|
sed
's/:.*//'
|
uniq
-‐c
2013/11/2
第7回シェル芸勉強会
25
- 27. 解答
• Macの場合(面倒)
– $
grep
-‐r
-‐o
foo
/etc
2>
/dev/null
|
awk
'{if($1=="foo"){print
a}else{print;a=$1}}'
|
uniq
–c
• GNU
grepだと楽
– $
grep
-‐r
-‐o
foo
/etc
2>
/dev/null
|
uniq
–c
• GNU
Awkユーザ会会長のこわい解答
– $
find
/etc/
-‐type
file
|
xargs
-‐n
1
awk
'{a+=gsub(/foo/,"")}
END{print
FILENAME,a}'
2013/11/2
第7回シェル芸勉強会
27
- 29. 解答
• $
cat
days
|
LANG=C
gdate
"+%s"
-‐f
-‐
|
sort
|
awk
'{print
"@"
$1}'
|
LANG=C
gdate
"+%b
%d,
%Y"
-‐f
-‐
|
sed
's/
0/
/'
• 会場から
– $
cat
days
|
sort
-‐k3,3
-‐k1,1M
-‐k2,2n
2013/11/2
第7回シェル芸勉強会
29