Kodama's home / tips.
お好みのコマンドやスクリプト言語で書いてみる.
ls -1 *html | xargs -i echo '<li><a href="{}">{}</a></li>'
最初に書いたのはこれ. リストを取って(ls) それを処理(xargs)すると考え, 細かいオプションは後から考える事にして, 反射的に ls | xargs とやっていた.
ls -1 *html | sed -e 's|.*|<li><a href="&">&</a></li>|'
通常は sed の s コマンドの区切り文字として | ではなく / を用いる.
awk とか perl のようなスクリプト言語の流行で sed を使う人は少なくなった?
find . -name '*html' -exec echo '<li><a href="{}">{}</a></li>' \; | sort
find . -name '*html' -printf '<li><a href="%P">%P</a></li>\n' | sort
ls の結果の書き換えから離れると, これが最も自然か?
for f in *html;do echo '<li><a href="'$f'">'$f'</a></li>';done
ls -1 *html | gawk '{printf("<li><a href=\"%s\">%s</a></li>\n",$0,$0)}'
この程度の処理なら sed の方が楽.
ls -1 *html | ruby -nle 'printf(%Q|<li><a href="%s">%s</a></li>\n|,$_,$_)'
ruby での繰り返しの方法としては, 大まかには以下のような手法が考えられる.
通常は ruby の文字列として %Q|...| ではなく "..." を用いる.
ls -1 *html | ruby -e 'while(gets);chomp;printf(%Q|<li><a href="%s">%s</a></li>\n|,$_,$_);end'
ls -1 *html | perl -e 'while(<>){chomp;printf("<li><a href=\"%s\">%s</a></li>\n",$_,$_)}'
ls -1 *html | (while read f;do echo '<li><a href="'$f'">'$f'</a></li>';done)
ls -1 *html | ruby -e 'STDIN.each{|f| f.chomp!;printf(%Q|<li><a href="%s">%s</a></li>\n|,f,f)}'
ls -1 *html | ruby -e 'readlines.each{|f| f.chomp!;printf(%Q|<li><a href="%s">%s</a></li>\n|,f,f)}'
上と下は見掛けはほとんど同じだが, 上では一行読み込む毎に処理しているのに対して, 下は, readlines で全体を読み込んでおいてから処理している. 複雑な操作をするならこの方が扱いやすい.
ruby -e 'Dir.glob("*html").sort.each{|f| printf(%Q|<li><a href="%s">%s</a></li>\n|,f,f)}'
Kodama's home / tips.