シェルスクリプト総合 その8
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2007/02/15(木) 14:28:44スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ
シェルスクリプト総合 その7
http://pc10.2ch.net/test/read.cgi/unix/1157601611/
0048名無しさん@お腹いっぱい。
2007/02/17(土) 01:34:50if [ i = y ]
then
echo aaa
fi
とかあるのだが、実際やってもErrorがでて・・・
if [[ i = y ]]
then
echo aaa
fi
みたいに2重括弧にしないといけないのはなぜなんでしょうか?
0049名無しさん@お腹いっぱい。
2007/02/17(土) 01:35:53ksh で 文字コードで grep するエレガントな方法が分かりません。
bash なら、
grep $'\011' hoge.txt
で可能だということは分かっています。
ksh だと、
grep "`echo '\011\c'`" hoge.txt
で同じことが可能だということは分かっていますが、bash ほど簡潔ではありません。
(いずれも Linux 上で確認)
昔、Solaris 8 上の ksh スクリプトで bash での記述例くらいに簡潔に書かれたコードを見た記憶があるのですが…。
分かる方がいらっしゃったらご教授ください。お願いします。
できれば ksh88 でお願いします。
0050名無しさん@お腹いっぱい。
2007/02/17(土) 02:51:41[ はコマンドで、[[ は bash の構文の一つ。
/bin/sh で書くなら [[ は使えない。
あと、比較演算子の書き方やその解釈がちょっと違う。
[ 1 -gt 0 ] と [[ 1 > 0 ]] とか
[ "1+1" -ge 2 ] と [[ "1+1" >= 2 ]] とか
詳細は man bash ね。
0051名無しさん@お腹いっぱい。
2007/02/17(土) 10:33:59if [ i = y ]
then
echo aaa
fi
↑でエラー出ないよ。
もしエラーが出たんなら、[ や ] や = の前後のスペースを忘れたとか、
そういう問題だと思う。([ ]か [[ ]]かの問題とは違う)
[[ ]] は Bourneでは使えないので、できる限り [ ] で書くのがお勧め。
0052名無しさん@お腹いっぱい。
2007/02/17(土) 10:58:27名前にスペースの入ったファイル名のリストを for とか foreach に渡すときは
どうしたらいいでしょうか。
for f in `find なんたらこうたら`; do ほげ "$f"; done; みたいなことをしたいのですが
find の結果のファイル名にスペースがある場合、スペースのとこで割られるようです。
0053名無しさん@お腹いっぱい。
2007/02/17(土) 11:10:46IFS='
' for f in `find なんたらこうたら`; do ほげ "$f"; done;
IFSに改行コードを入れて、それを区切り文字にする。
0054名無しさん@お腹いっぱい。
2007/02/17(土) 11:13:56find の部分をコマンド置換すると、ファイル名のデリミタとしての半角空白なのか、ファイル名中の半角空白なのがシェルから見ると区別がつきません。
上手く動かない原因はこれです。
よってコマンド置換で実現するのは諦めましょう。
- start --------------------
find . -type f |
while read f
do
echo $f
done
- end ----------------------
自分がパッと思いつくのはこれ。
ただ、read コマンドは遅いので、もっとエレガントを考える余地があるかもしれません。
ところで、sh に foreach ってありましたっけ?
0055名無しさん@お腹いっぱい。
2007/02/17(土) 11:15:41IFS=\
for a in `find . -type f`;do echo "$a";done
これでも、名前に改行が含まれるとダメなのでfind -execをおすすめする。
0056名無しさん@お腹いっぱい。
2007/02/17(土) 11:20:18その方法、いいですね!
でも環境変数を触るのって、どうなのでしょう?
触るとしても、
- start --------------------
OLD_IFS=$IFS
IFS='
'
for f in `find . -type f`
do
echo $f
done
IFS=$OLD_IFS
- end ----------------------
を推奨すべきかと。
0057名無しさん@お腹いっぱい。
2007/02/17(土) 11:27:220058名無しさん@お腹いっぱい。
2007/02/17(土) 11:29:43>>57
ああ、本当だ。改行がファイル名に入るとアウトですな。
for や while だと完全ではないですね…。
0059名無しさん@お腹いっぱい。
2007/02/17(土) 12:20:55なんでそんなことする必要があるんだ?
>>53 のスクリプト作って、実行した後の $IFS 見てみた方がいいよ。
0060名無しさん@お腹いっぱい。
2007/02/17(土) 13:11:120061名無しさん@お腹いっぱい。
2007/02/17(土) 13:18:38続きがあっても関係ない。
↓これ試してみろ。
HOGE=hoge command
echo $HOGE
0062名無しさん@お腹いっぱい。
2007/02/17(土) 14:04:31IFS='
' for f in `find -type f`; do echo "$f"; done;
$ sh hoge
sh hoge
for: not found
hoge: 2: Syntax error: ";" unexpected
0063名無しさん@お腹いっぱい。
2007/02/17(土) 14:09:59IFS='
' for f in `find . -type f`; do echo "$f"; done;
だった。
0064名無し募集中。。。
2007/02/17(土) 21:45:40IFSの変更に対して安全かどうなかなんて元のお題には意味なくないか?
元のお題だとそもそもfindで引っかかる数(吐き出す文字数)が予測不能なんだし
tabやspaceのことも含めて for はやめて find | xargs か while の方が安全なんだが
あとファイル名に改行コードが含まれる場合は?とかこの板的には重要かもしれん
けど、そこまで考えるとどうしたら処理できるか?より、そんなファイルが作られないように
するにはどうしたらいいか?という問題になる気がする
その上でそういうファイルをリネームや削除するスクリプトを組みたいっていうなら
環境や状況に合わせたものを組めばいい、動くことが重要で
エレガントな一般的解法なんて考えても無駄だし必要もないはず
0065名無しさん@お腹いっぱい。
2007/02/17(土) 22:54:12フロー制御コマンドは変数=値 command形式では使えないという事実は、
このスレ的には重要。
006652
2007/02/18(日) 09:45:52自分の環境では改行がファイル名に入ることはとりあえずないんですが、
より厳密には find -print0 として IFS に NUL をセットすればいいんですかね?
と思ったんですが... あれ、IFSにNULをセットって、どうやればいいんでしょう?
たびたびすいません。
0067名無しさん@お腹いっぱい。
2007/02/18(日) 11:30:58とした場合、 perl などでは \1 で (\w+?) の内容を
参照できるのですが、 grep (sed, awk など) でそうする方法はありますか?
0068名無しさん@お腹いっぱい。
2007/02/18(日) 12:52:25厳密にやりたかったら
1 find -print0を使ってNULLをレコードの区切りと認識できるコマンドで
処理する(shのwhileやforは使用できない)
2 find -execで1個づつ処理する。
3 perlで全部やる
>>67
sedにはある。awkは知らん。マニュアル嫁。
0069名無しさん@お腹いっぱい。
2007/02/18(日) 13:03:350070名無しさん@お腹いっぱい。
2007/02/18(日) 13:29:370071名無しさん@お腹いっぱい。
2007/02/18(日) 14:30:15繰り返してほざく知恵遅れが小学校の時にいたんだが、
>>68=70 でそいつを思い出した.
もしかするとそいつかもw
0072名無しさん@お腹いっぱい。
2007/02/18(日) 15:13:28まあ、諭されてることすら理解できてないんだろうけど。
0073名無しさん@お腹いっぱい。
2007/02/18(日) 15:32:02007469!=71
2007/02/18(日) 15:33:37他人に煽られたからってお前がその煽り文句を真似して効果があるとは限らんぞ。
0076名無しさん@お腹いっぱい。
2007/02/18(日) 15:59:070077名無しさん@お腹いっぱい。
2007/02/18(日) 17:00:230078名無しさん@お腹いっぱい。
2007/02/18(日) 23:20:22どっちでもできる。
man に載っているよ。
007964
2007/02/19(月) 05:56:44お、仰るとおりですな
>>52
普通?は find コマンドと IFS 変数は関係ないよ
いや余程特殊な環境があるなら分からんけど
IFS 変数は Bourne Shell 系 ( sh, ksh, bash など) で区切り文字の定義に使われる
で find コマンド自体はこの環境変数を参照しないから関係ない
find -print0 は出力する各ファイル名にヌル文字を付加する
で find -print0 が使える環境なら xargs -0 も使えるんじゃない?
>>57さんが既に言ってるけどね
>>67, >>78
sed, grep はあるけど awk はなかったような
0080名無しさん@お腹いっぱい。
2007/02/19(月) 06:11:10grep ではどうやんの?
008264
2007/02/19(月) 07:03:11あ、find -print0 と IFS を弄って while を組合わせたいって意味なら駄目だよ
>>68さんの言ってる方法で
それより -print0 オプションが使えない環境もあるから
まずはそっちを調べた方がいいよ
0083名無しさん@お腹いっぱい。
2007/02/19(月) 07:57:15findコマンド自体では IFSは当然関係ないが、
findの結果を ` ` で取り込んで forの引数にする際に
IFSが参照される。(IFSの影響を受ける)
なので、スペース入りファイル名の問題なら、
IFSの内容を改行コードのみにして for f in `find ...` を実行すればOK
なことは既に上に書かれている。
0084名無しさん@お腹いっぱい。
2007/02/19(月) 17:57:07ちなみに NULL じゃなくて NUL ですね。
0085名無しさん@お腹いっぱい。
2007/02/19(月) 22:58:23頭ではわかっているが、指が憶えてしまっているのでしょうがない。
0086名無しさん@お腹いっぱい。
2007/02/20(火) 02:12:08man awk の文字列関数の項を参照してみな。
もしかしたら gawk だけかもしれないけど。
0087名無しさん@お腹いっぱい。
2007/02/20(火) 10:40:490088名無しさん@お腹いっぱい。
2007/02/20(火) 11:31:38008964
2007/02/20(火) 17:58:58素のAIXじゃ、grep '\(a\)\1' はできたが egrep, grep -E は無理みたい
拡張正規表現だと \1 は使えなさそうあとawkも
gawk は知らんけどgawkは無い環境も多いからawkとgawkを一緒にするな
awkと言えば昔ながらの素のawkのことだよ
linuxでshを語るアホウ(そりゃashだ)と同じやね
009064
2007/02/20(火) 19:15:33shについては、Cygwinもash、今時の素のAIX、HP-UXなら実はkshだったりするから
Solaris、FreeBSDは知らんけど例としてはかなり不適切やね、無視してくれ
0091名無しさん@お腹いっぱい。
2007/02/20(火) 21:12:01set -o emacs
set -o vi
どっち?
0092osuga
2007/02/20(火) 22:49:15HP-UXのデフォルトがkshかよ
0093名無しさん@お腹いっぱい。
2007/02/20(火) 22:58:230094名無しさん@お腹いっぱい。
2007/02/20(火) 23:48:35> 素のAIXじゃ、grep '\(a\)\1' はできた
参考までに grep のバージョン教えてくれ。
>>90
> Cygwinもash
それいつの話?
手元の環境だと ash は入れてあるけど、sh の実体は bash になってるよ?
$ uname -r
1.5.24(0.156/4/2)
$ /bin/sh --version
GNU bash, version 3.2.9(11)-release (i686-pc-cygwin)
Copyright (C) 2005 Free Software Foundation, Inc.
0095名無しさん@お腹いっぱい。
2007/02/21(水) 02:37:28POSIX的には拡張正規表現(ERE))でbackrefernceが使えるということは
一言も書いていないので、grep -E でbackrefernceが使えるGNU grep
なんかが拡張しているということなんだろう。多分。
0096名無しさん@お腹いっぱい。
2007/02/21(水) 04:14:13叩きはすぐ集まってくるけど
grep '\(a\)\1' は実際できるし(AIX5.3、SFU)、基本正規表現(BRE)にあるんで
linuxやHP-UXのgrepでも出来た記憶がある、まぁ昔の事なんで自信はない
拡張正規表現(ERE)にはBREの\( \)にあたるものが無いようで
>>95はフォローしてくれたんだろうけど
実際にやってみたが egrep, grep -E じゃできなさそう(AIX5.3)と既に書いている
HP-UXのshについては昔、といっても11iなんだが
純粋なshでは使えないはずの [[ ]] や alias なんかが使えたんで調べたら
sh-posix とか書かれていて、sh->kshで拡張されたものがほぼ?まんま拡張されてた
なんでHP-UXのshはksh、って位の認識だったんだが
POSIX の sh いうんやから [[ ]] や alias が使えるのが今時の純粋な sh ということかもしれんね
0097名無しさん@お腹いっぱい。
2007/02/21(水) 09:12:36正規表現については以降はこちらへ
↓
正規表現
http://pc10.2ch.net/test/read.cgi/unix/1039165754/
0098名無しさん@お腹いっぱい。
2007/02/21(水) 10:35:280099名無しさん@お腹いっぱい。
2007/02/21(水) 10:37:51だから、sh-posixの部分だけ書けばいい。
正規表現の部分はスレ違い。
0100名無しさん@お腹いっぱい。
2007/02/21(水) 10:57:54solaris においては /bin/sh は sh-posixではなく
/usr/xpg4/bin/sh が ごにょごにょ
FreeBSD では /bin/sh は IEEE Std 1003.2 (``POSIX.2'') に対応する途上
NetBSD では /bin/sh は POSIX 1003.2 and 1003.2a に対応する途上
OpenBSDでは (ry
HP-UX では
0101名無しさん@お腹いっぱい。
2007/02/21(水) 10:59:100102名無しさん@お腹いっぱい。
2007/02/21(水) 12:16:07でも嫁
現在のHP-UXの/bin/shはsh-posixであって、古いbourne shellは存在しない
sh-posixはkshによく似ているが別物
>>90は間違いだらけ
010395
2007/02/21(水) 12:40:01すまん。寝る直前に書いたせいか
フォローのつもりがわけのわからんものになってた。
GNU のツールでそうだからといって、
それがUNIX全般でいえるかというと違うよね。
というのを補足したかった(awkとgawkとか)
0104名無しさん@お腹いっぱい。
2007/02/21(水) 13:49:30以前は /usr/old/bin/sh に Bourne shell があったんだけど今はもうないの?
手元に実機がないので確認できない。
0105名無しさん@お腹いっぱい。
2007/02/21(水) 14:03:34実機がなくても参照できちゃうんだなこれが
http://docs.hp.com/ja/B2355-60104-02/sh.1.html
-
注記 : B シェル (/usr/old/bin/sh) は、HP-UX 11i Version 1.5 以降、削除されました。
代りに、POSIX シェル (/usr/bin/sh) を使ってください。
-
本当に実機がこうであるかは確認していないけどね〜
0106ksh
2007/02/21(水) 19:49:50シェル初心者ですが教えてください。
「ディレクトリの中にあるファイルで、実行権限のないファイルを読み込み
そのファイルに実行権限を付与するシェルが必要なのですがどうすればいいのかわかりません。
OS: AIX shell: ksh
#!/bin/ksh
for filename in ${1:+$1/}* ; do
newfilname=$(print $filename |tr [A-Z] [a-z])
newfilename=$newfilename%.}
print "$filename -> $newfilename"
mv $filename $newfilename
done
とりあえず自宅のfedora core5 のkshで実行したら、
' unexpectedtax error: `
と表示されて困ってます。
どうか教えてください。お願いします。
0107名無しさん@お腹いっぱい。
2007/02/21(水) 19:56:52質問が支離滅裂。実行権限を付けたいといっているのに、
スクリプトではファイル名の大文字を小文字にリネームしようとしている。
あと、クォートが正しくないので、スペース入りファイル名とかでコケるだろう。
釣りじゃないならもう一度よくまとめてから質問し直せ。
0108ksh
2007/02/21(水) 20:43:07リネームするスクリプトを少し変更して作ろうとしているのですが、
このファイルもこけて動かないんです。
0109名無しさん@お腹いっぱい。
2007/02/21(水) 21:12:05そんなの、
#!/bin/sh
chmod +x "$1"/*
だけでいいじゃん。kshである必要もなし。
0110名無しさん@お腹いっぱい。
2007/02/21(水) 21:13:561. シェルスクリプトのことをシェルというな。
2. forの次の行からdoneの前の行までは全部リネーム用でいらないから削れ。
3. man test
4. man chmod
0111名無しさん@お腹いっぱい。
2007/02/21(水) 21:15:07「実行権限のないもののみを選び出す」というのが宿題の一部であると
思われるので、問答無用で+xしちゃいけないかもしれない。
0112名無しさん@お腹いっぱい。
2007/02/21(水) 21:19:54もともと +x なファイルを chmod +x しても影響はない。
AIXで実行しようとしてるし、だとすると
宿題じゃなく、実務で必要なんだろ。
chmod +x で十分。
(ctimeは更新されるけど、そんなの普通関係ない)
0113名無しさん@お腹いっぱい。
2007/02/21(水) 21:23:34えっと、こういうことでしょうか?
#!/bin/ksh
for filename in ${1:+$1/}* ; do
man test
man chmod
done
やってみましたが、なんか、ファイルの数だけマニュアルのようなものが表示され、
実行権限は付きませんでしたが、、
0114名無しさん@お腹いっぱい。
2007/02/21(水) 21:25:510115ksh
2007/02/21(水) 22:08:50#!/bin/ksh
for filename in ${1:+$1/}* ; do
if [[ -f $filename ]] ; then
chmod +x $filename
fi
done
なんとかディレクトリの中のファイルすべてに実行権限を付与できました。
これはシェルスクリプトと言うのでしょうか?
お恥ずかしながらシェルスクリプトとはなにか?イメージが完全でなく・・・
0116名無しさん@お腹いっぱい。
2007/02/21(水) 22:38:30> kshです。
ペソじゃなかったのかw
0117ksh
2007/02/21(水) 22:53:27ルールよくわかってなくてすみませんっw
0118名無しさん@お腹いっぱい。
2007/02/25(日) 06:28:13単に興味本位で聞くけどsh-posixとkshを比較して
実際に機能として違う部分てどんなところがあるの?
0119名無しさん@お腹いっぱい。
2007/02/26(月) 18:34:31あれ、"THE T IN TCSH" なんて項目、昔あったっけ?
turbo csh じゃないじゃん > 昔俺にそう教えた奴
0120名無しさん@お腹いっぱい。
2007/02/26(月) 18:41:120121名無しさん@お腹いっぱい。
2007/02/27(火) 00:44:41それまでは、fep 使ってました。bash は、なじめんな。
今は、zsh 派です。
0122名無しさん@お腹いっぱい。
2007/02/27(火) 04:53:35102とは別人だけど、kshはksh88とksh93で非常に違う。
とくに後者はperlに遜色ないほどの汎用言語になっている。
kshはbashと同じくshベースということで、
bashがkshから採り入れた機能もけっこうある。ローカル変数とか
0123名無しさん@お腹いっぱい。
2007/02/27(火) 17:22:33え?違うんだ、知らなかった
0124名無しさん@お腹いっぱい。
2007/02/27(火) 22:13:24もうwのないkshしかないからなぁ・・・
0125名無しさん@お腹いっぱい。
2007/02/27(火) 22:45:550126名無しさん@お腹いっぱい。
2007/02/27(火) 22:49:25nkf -e < script
nkf -j < script
nkf -s < script
nkf -w < script
で化けないパターンを探してそれに置き換える。
0127名無しさん@お腹いっぱい。
2007/02/27(火) 22:51:13その vi の実体は、賢い vi で、
シェルの ENV がついていけてないとか。
0128名無しさん@お腹いっぱい。
2007/02/28(水) 00:25:54exp 〜 query\"where column_name in\( select col from tableB \) \"
みたくqueryパラメータで副照会できないようなんで
exp 〜 query\"where column_name in\( $COLUMN_NAMES \) \"
なんて具合に変数を埋め込みたい。
シェル変数が展開されてからexportに渡されるようにする方法ないかな?
0129名無しさん@お腹いっぱい。
2007/02/28(水) 00:54:58nkf -g が無いバージョンかな?
0130名無しさん@お腹いっぱい。
2007/02/28(水) 01:00:16nkf -wができることに最近気づいたくらいアップデートしてなかったんで。
0131名無しさん@お腹いっぱい。
2007/02/28(水) 09:20:31中国の恐さにぞっとすること請け合い。
あいつら本気で日本を侵略する気だ。
そして、手下はやはり立命館?
0132118
2007/03/01(木) 04:39:27すんません書き漏れです
知りたいのはsh-posixとksh88の機能差です
kshにksh88とksh93があってかなり違うってのは知ってるというか
kshの情報には大抵2つのバージョンの比較が併記されてるもんだし
ただsh-posixとksh88の比較は見たことがないし違いも見つけられなかったもんで
0133名無しさん@お腹いっぱい。
2007/03/01(木) 06:28:17・ パターンマッチングがegrep相当に拡張
・ [[ ほげ ]] (中身をメタキャラ解釈しないtestのようなもの)
・ 配列が使えた
・ emacs風コマンドライン編集
ってとこか。なおksh93はksh88と挙動が違ったりバグが直されたりしてるし、
ksh88とpdkshでも機能に違いがあるので、
ksh88で動けば他のkshで動作するとは限らない
0134名無しさん@お腹いっぱい。
2007/03/01(木) 22:50:400135名無しさん@お腹いっぱい。
2007/03/02(金) 00:10:52----
yes
・・・・
・・・
・・・・・
IPアドレス xxx.xxx.xx.54
----
no
・・・・
・・・・・
IPアドレス xxx.xxx.xx.123
----
yes
・・・・・・・・・
・・・・・
IPアドレス xxx.xxx.xx.23
こういうふうに加工したいのですが、
yes,xxx.xxx.xx.54
no,xxx.xxx.xx.123
yes,xxx.xxx.xx.23
・・・・・・・・・
・・・・・
の部分は2行のときもあるし10行のときもあります。
0136135
2007/03/02(金) 00:14:33----
と
IPアドレス
という文字をうまく関連付ければ
加工可能とは思うのですが、
具体的にどうしたらいいのかよくわかりません。
最初の
----
を見つけたら
その次の「IPアドレス」という文字列を捕まえて
xxx.xxx.xx.123を確保する、
という形でしょうか。
うまい方法があればヒントをいただけますか?
cat、more、grep、cut、sedなど一般的なコマンドは習得しています。
0137名無しさん@お腹いっぱい。
2007/03/02(金) 00:19:45めんどくさいから perl 使っちゃうな。
0138名無しさん@お腹いっぱい。
2007/03/02(金) 00:34:22for file in xx*; do echo `sed -n '2p;${s/.* //;p}' $file`; done
csplitってPOSIX標準だっけ?
0139名無しさん@お腹いっぱい。
2007/03/02(金) 00:34:300140名無しさん@お腹いっぱい。
2007/03/02(金) 01:17:000141名無しさん@お腹いっぱい。
2007/03/02(金) 01:52:510142名無しさん@お腹いっぱい。
2007/03/02(金) 02:52:27書いてみて
0143名無しさん@お腹いっぱい。
2007/03/02(金) 08:40:46俺も awk に一票だが、
最初と最後をどうにかすれば grep と sed だけでもできそう。
grep -C 1 -x -e ---- | sed ....
こんな感じで。
0144名無しさん@お腹いっぱい。
2007/03/02(金) 08:56:59N;
N;
N;
s/¥(yes¥|no¥)¥n/¥1 /;
s/----¥n//;
s/--¥n//;
s/IPアドレス //;
p'
改行ってどこのsedでも¥nと書けるのだっけ?
0145名無しさん@お腹いっぱい。
2007/03/02(金) 09:03:200146名無しさん@お腹いっぱい。
2007/03/02(金) 09:10:43/¥(yes¥|no¥)/h;
/IPアドレス /{
H;
x;
s/¥(yes¥|no¥)¥n/¥1/;
s/IPアドレス /,/;
p
}' input
どだっ!?
0147135
2007/03/02(金) 13:43:23僕はまだレベルが低いですし
awkは(難しくて)使えないので
>>143さんの
grep -C
オプションでやってみよと思います。
0148名無しさん@お腹いっぱい。
2007/03/02(金) 15:27:32■ このスレッドは過去ログ倉庫に格納されています