Hatena::ブログ(Diary)

日暮れて途遠し このページをアンテナに追加 RSSフィード

<ようこそ! 最初にお読みください。>
 告発、告訴の問題は、現在次のブログをメインにしています。
再審請求に向けて:http://hirono-hideki.cocolog-nifty.com/blog/

本日、金沢地方検察庁に電話連絡をしました。追って、エントリを書きます。
2008年1月21日

本日、金沢地方検察庁に電話連絡をしました。追って、エントリを書きます。
9月25日20時49分

 まだ書いていませんが、簡単にご報告しますと、今年度の新しい担当者のお名前は、「タカマツ」。たぶん、高松と書くのでしょう。当日不在ということで、 まだ声も聞いていないのですが、例の捜査官室長のような上司の人が、対応に出て、尋ねもしないのに、名前を教えてくれました。  とても変わった名前で、「戸澗(とま)」というそうです。  なお、この部分は、エントリに記載後、消去する予定のお知らせです。 10月4日23時31分


 ここ一ヶ月間のアクセス状況を公開しました。10分ほど前の記録になります。 2007年9月26日22時33分
2008年10月6日、金沢地方検察庁に電話連絡。応対したのは岸田さん。 2008年10月29日0時55分

2009-04-16 *1239893106*[蛻台コ玖」∝愛][蠑∬ュキ螢ォ]蛻台コ玖「ォ蜻贋ココ縺

[]grepコマンドを条件式で使う。

       -q, --quiet, --silent
              沈黙。通常の出力を抑止します。スキャン動作は最初のマッチで終了し
              ます。下記の -s や --no-messages オプションも参照。

       -r, --recursive
              各ディレクトリ下のすべてのファイルを再帰的に読み取ります。これは
              -d recurse オプションと等価です。

       -s, --no-messages
              指定されたファイルが存在しないことや読み込みできないことを示すエ
              ラーメッセージを抑止します。移植性に関する注: GNU grep とは異 な
              り 、伝統的な grep は POSIX.2 に適合していませんでした。なぜなら
              、伝統的な grep には -q オプションが無く、 -s オプション は  GNU
              grep  の -q オプションの様に動作したからです。伝統的な grep へ移
              植可能であることを意図したシェルスクリプトは、 -q と -s を両方と
              も使わずに、出力を /dev/null へリダイレクトすべきです。

 Fedora8のmanコマンドからの抜粋です。

 次のようにコマンドラインからでも使えます。

FU:[~]% if ls |grep -q -s "hatena"; then
> echo "OK"
> else
> echo "NG"
> fi
OK
FU:[~]% if ls |grep -s "hatena"; then echo "OK"; else echo "NG"; fi
hatena
u8w-hatena-log-2008-12-30_1428.jpg
OK
FU:[~]% 

 上は、シェルスクリプトで使う場合で、コマンドラインから条件指定で使うなら、つぎの方法の方が実用的だと思います。テストなので文字を表示させているだけですが、別のコマンドに置き換えれば、いろいろ出来ます。たとえばファイルを消したりするとか。

FU:[~]% ls |grep -q -s "hatena" && echo "OK" || echo "NG"
OK
FU:[~]% ls |grep -q -s "存在しないはずの文字列" && echo "OK" || echo "NG"
NG
FU:[~]% 

 grepの-sオプションは、エラー出力を抑制しているらしいですが、やはり/dev/nullに送った方が、シェルスクリプトでは、処理内容が明示的でわかりやすい気がします。

FU:[~]% grep "^xxxxxx$" nofile
grep: nofile: そのようなファイルやディレクトリはありません
FU:[~]% grep -s "^xxxxxx$" nofile
FU:[~]% grep "^xxxxxx$" nofile >/dev/null 2>&1       #標準出力も一緒に捨てる。
FU:[~]%
FU:[~]% grep "^xxxxxx$" nofile 2>/dev/null           #えらー出力だけ捨てる。
FU:[~]% 

2009-04-01 *1238618002*譛ャ譌・蛻??縲√お繝ウ繝医Μ縺ョ荳ヲ縺ウ鬆?r螟画峩

[][]コマンドラインでの、処理の複数指定

<1>
% sed -e '1,/<\/head><body>/d' \                                    [~/Lesoon/emacs]
%     -e 's/<\/html>//' \
%     -e '/Table of Contents/s/<h2>\(.*\)<\/h2>/<div style="color: red;">\1<\/div>/'\
%     -e 's/<h2 /<h2 class="hh" /g' \
%     -e 's/<h3 /<h3 class="hh" /g' \
%     -e 's/<h4 /<h4 class="hh" /g' \
%     -e 's/<h5 /<h5 class="hh" /g' \
%     -e 's/<\/body>//g' \
%  kokuso-tex.html

<2>
sed -f cocolog-css kokuso-tex.html
% cat cocolog-css                                                   [~/Lesoon/emacs]
#org-modeからhtmlエクスポートされた
#htmlファイルをmapaeの記事投稿用に加工する。
1,/<\/head><body>/d
s/<\/body>//g
s/<\/html>//g
/Table of Contents/s/<h2>\(.*\)<\/h2>/<div style="color: red;">\1<\/div>/
s/<h2 /<h2 class="hh" /g
s/<h3 /<h3 class="hh" /g
s/<h4 /<h4 class="hh" /g
s/<h5 /<h5 class="hh" /g

%  

 <2>の方法の方が使い方としては楽なんですが、別ファイルに依存しないコマンドにしたいと思い、いろいろ試行錯誤しました。結局、うまくいかなかったのですが、正規委表現における制御文字の扱いが、Emacs-Lispでは、異なるのでさらにややこしくなっています。

 問題にした部分は、

(call-process-region

sp ep "sed" nil tmpbuf nil

"-f" "/home/u8w/saisinn/cocolog-css")

というように、結局、外部ファイルを使うことにしたのですが、このEmacs-Lispの関数では、シェルのコマンドの引数を一つずつ、指定する必要があるらしく、とても面倒なことになってしまいました。これだけでも、数えると8個の引数があることになります。

 UNIXのコマンドをEmacsで活用できるとてもありがたい関数ですが、使う人も少ないのか情報も多くありませんでした。Emacsでなんでも自動化できるとても便利な関数だと思うのですが、もう少し何とかならないものかと思いました。

ちなみに、hatena-modeのソースコードを眺めると、curlというコマンドを頻繁に使っていました。これも余り知られていないようですが、コマンドラインからインターネットを操作するには、多機能でとても便利なコマンドです。

2009-02-18 *1234959435*[刑事裁判]強制わいせつ致傷、男性に無罪判決 「確固た

[]date 過去や未来の日付を調べる

/home/ws% date -d '100 days'
2009年  5月 29日 金曜日 00:40:15 JST
/home/ws% date -d '100 days ago'
2008年 11月 10日 月曜日 00:40:25 JST
/home/ws% LANG="en_us.UTF-8" date
Wed Feb 18 00:42:04 JST 2009
/home/ws% date
2009年  2月 18日 水曜日 00:42:11 JST
/home/ws% LANG=C date
Wed Feb 18 00:42:28 JST 2009
/home/ws% date --date '39 months ago'
2005年 11月 18日 金曜日 00:44:01 JST
/home/ws% date -d '36 months'
2012年  2月 18日 土曜日 00:44:40 JST
/home/ws% LANG="en_us.UTF-8" date +"%Y %b %d %H:%M" --date "18  years"
2027 Feb 18 00:47
/home/ws% date +"%Y %b %d %H:%M" --date "18  years ago"
1991  2月 18 00:49
/home/ws% date +"%Y %b %d %H:%M" --date "17  years ago"
1992  2月 18 00:49
/home/ws% date +"今から17年前:%Y年 %b %d日 %H:%M" --date "17  years ago"
今から17年前:1992年  2月 18日 00:53

2008-08-25 *1219674001*[shell]一時的に作業ディレクトリを移動するalias

[]ブレース展開<bash

[a8@gev LATEX]$ echo 'abc'000{1..3}-{1..10}
 abc0001-1 abc0001-2 abc0001-3 abc0001-4 abc0001-5 abc0001-6 abc0001-7 abc0001-8
 abc0001-9 abc0001-10 abc0002-1 abc0002-2 abc0002-3 abc0002-4 abc0002-5 abc0002-6
 abc0002-7 abc0002-8 abc0002-9 abc0002-10 abc0003-1 abc0003-2 abc0003-3 abc0003-4
 abc0003-5 abc0003-6 abc0003-7 abc0003-8 abc0003-9 abc0003-10

 文字列を表示させただけですが、次のように内容が空のファイルを作ることもできます。

[a8@gev tmp]$ touch file-000{1..9}.txt
[a8@gev tmp]$ ls
file-0001.txt  file-0003.txt  file-0005.txt  file-0007.txt  file-0009.txt
file-0002.txt  file-0004.txt  file-0006.txt  file-0008.txt
[a8@gev tmp]$

2008-03-21 *1206111751*[繝。繝?ぅ繧「]繧上°繧翫d縺吶>繧ケ繝医?繝ェ繝シ縺

[]コマンドラインシェル)での添付ファイルの送信

まず、添付したいファイルの作成

[root@sv ~]# tar jcvf hatena_log.tar.bz2 logs

これで、logsというディレクトリの中身が、hatena_log.tar.bz2というbz2形式の圧縮ファイルに一本化されます。

 圧縮ファイルの展開(解凍とも)には、

tar jxvf hatena_log.tar.bz2

という操作を行いますが、展開先のディレクトリに、同名のディレクトリ(この例の場合はlogsが、存在した場合、中身が上書きで入れ替わってしまうかもしれませんので、注意をした方がよさそうです。


[root@sv ~]# uuencode hatena_log.tar.bz2 hatena_log.tar.bz2 |mail -s "test uuencode" メールアドレス

 mailコマンドの-sオプションはサブジェクト(件名)の指定ですが、このままでは日本語は使えず、使うと文字化けを起こします。

 uuendodeの引数に、同じファイル名を指定していますが、一つ目は処理対象となるファイル名、二つ目は展開後のファイル名を指定しているようです。


 fedoraではuuencode、uudecodeはもともとインストールされていないので、次のようにyumで、インストールできます。

yum -y install sharutils


参考書籍:

続・たのしいUNIX―シェルへの招待 (Ascii books)

続・たのしいUNIX―シェルへの招待 (Ascii books)