Re: UNIXですか?



[ このメッセージへの返事 ] [ 返事を書く ] [ home.html ]



投稿者: 68user @ oryo.inforyoma.or.jp on 97/9/21 04:50:45

In Reply to: どなたかSEDで変換した後保存する方法教えて下さい

posted by まなう゛ @ ppp9e9a.pppp.ap.so-net.or.jp on 97/9/20 23:18:04

ここではUNIXと仮定します。

UNIX系のシェル(csh、tcsh)は基本的にワイルドカードの扱いが
MS-DOSと違います。

MS-DOSではワイルドカードの展開は各アプリケーションにまかされて
いますが、UNIXではシェルが展開した後アプリケーションに渡します。

# アプリケーションに未展開のワイルドカードを渡したかったら
# クオートします。例えば
# find . -name \* -print

だから

> sed -f スクリプトファイル *.* > *.*

の最初の*.*と*.*は同じ文字列が展開されますし、

sed -f スクリプトファイル *.* > *.*.sed

としても *.*.sed は現在カレントディレクトリに存在する *.*.sed に
展開されてしまいます。つまりMS-DOSでいう

ren *.doc *.dat

はできません。こういう場合 csh、tcsh系なら foreach を使います。

(1)
X68000->zxr400:{40} foreach i ( * )
foreach? sed -f script $i > $i.sed
foreach? end

(2)
X68000->zxr400:{40} foreach i ( * )
foreach? sed -f script $i > "$i"sed
foreach? end

# (2)は sed -f script $i > $ised だと$isedというシェル変数と認識されるので
# クオートしてます。(1)は . があるから大丈夫。

sh、bash系なら

$ for i in *
> do sed -f script $i.sed
> done

ですね。

あと、ご存知かもしれませんが UNIXでは * は先頭のドット以外の文字列を
表します。
% ls
.cshrc bin sample.c
% echo *
bin sample.c
% echo .*
.cshrc
% echo *.*
sample.c

となります。