1 名前:名無しさん@お腹いっぱい。 [2008/05/20(火) 20:58:04 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。 シェルスクリプト総合 その10 pc11.2ch.net/test/read.cgi/unix/1202725267/
123 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 06:14:58 ] pgrepないの?
124 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 07:19:56 ] >>122 まず、wc -lしたりretに代入したりしてるのが無駄。 grepは戻り値返すから、 if ps -ef | grep "collector.php" | grep -v grep > /dev/null; then で桶。
125 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 07:34:52 ] >>122 発想を転換しろ。 もし、php /hoge.phpを起動して、落ちたら再度起動、ってやりたいだけなら、 while : do php /hoge.php done だけでOK。&は付けない。sleepもpsも必要なし。
126 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 17:03:52 ] >>123 ,124 ありがとう、おっしゃる通り。 試してみます。 >>125 惜しい。 実はhoge.phpは1種類ではなく、3種類存在します。 実際はret〜fi間が、3個あり、hoge1.php〜hoge3.phpを対象にチェックしています。 #>>122 のコードで、collector.phpとhoge.phpは同一です。コピペミススマソ。 #!/bin/sh while true do ★ret=`ps -ef | grep "hoge1.php" | grep -v grep | wc -l` if [ $ret -eq 0 ]; then php /hoge1.php & fi ★ret=`ps -ef | grep "hoge2.php" | grep -v grep | wc -l` if [ $ret -eq 0 ]; then php /hoge2.php & fi ★ret=`ps -ef | grep "hoge3.php" | grep -v grep | wc -l` if [ $ret -eq 0 ]; then php /hoge3.php & fi sleep 1 done hoge1.php の終了を待たずに hoge2.php や hoge3.php の プロセスチェック&起動を行いたいため、末尾に&を付けている次第です。 hoge1.php〜hoge3.php毎にシェルスクリプトを3個作成すれば >>125 の通りで期待が叶いますが、それはそれで無駄な感じがしまして。
127 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 17:23:55 ] >>126 シェルスクリプトひとつでできる。 while文の最後のdoneに &を付けるのがポイント。 while : do php /hoge1.php done & while : do php /hoge2.php done & while : do php /hoge3.php done &
128 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 18:12:48 ] >>127 げ、すげぇ。できました。。プロセスが3つ立ち上がるのですね。 ありがとうございます!! シェルスクリプトすごいっすねぇ。。。感動。
129 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 18:53:56 ] 質問: grep の -q オプションってどの grep(1) でも使えたっけ?
130 名前:名無しさん@お腹いっぱい。 mailto:age [2008/05/31(土) 18:55:12 ] 年中無休発狂妄想爆裂憤死寸前粘着真性キチガイ包茎池沼病気猿男(狂猿)◆QfF6cO2gD6による気違いカキコの続き: 初心者もOK! FreeBSD質問スレッド その95 pc11.2ch.net/test/read.cgi/unix/1210728872/706-708,710,712 706 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/05/31(土) 16:24:19 AAとコピペばっか 707 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/05/31(土) 16:25:33 アク禁報告を誰もしてないのが不思議w してても無視されてるのか 708 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/05/31(土) 16:31:15 >>704 假性ですが何か? 710 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/05/31(土) 17:45:14 粘着キチガイ男(狂犬)をアク禁にしたらリアルに無差別殺人起こす可能性が高いからな。 712 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/05/31(土) 17:59:51 ビビって書き込み止めたのか?と煽ってみる -------------------------------------------------------------------------------------------- UNIX板のあちこちのスレッドを荒らしている凶悪メンヘラ・真性キチガイ猿粘着◆QfF6cO2gD6。 いつも荒らしを憎むようなレスをするが、実際に荒らしているのは自分。 気色の悪い年中無休発狂粘着真性キチガイ包茎池沼病気猿男(狂猿)◆QfF6cO2gD6があちこちのスレに 遂に理解できないような基地害カキコをし始めた!気持ちが悪い…。
131 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 19:09:54 ] >>129 unlike GNU grep, traditional grep did not conform to POSIX.2, because traditional grep lacked a -q option and its -s option behaved like GNU grep’s -q option. Shell scripts intended to be portable to traditional grep should avoid both -q and -s and should redirect output to /dev/null instead.
132 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 19:11:42 ] ヘブライ語でおk
133 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 19:24:58 ] 要約すると、-qオプションがない古いgrepもあるから、 grep hoge > /dev/null にした方が移植性が高いってこと。
134 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 19:36:58 ] >>131 >>133 Danke schoen
135 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 19:48:04 ] Bitte schöen
136 名前:名無しさん@お腹いっぱい。 [2008/06/01(日) 08:07:21 ] 質問です。 5から10までの数字をランダムに、しかも2桁に揃えて表示させたい。 空欄を埋めてください。 #!/bin/sh 空欄 echo $randtime
137 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 08:12:38 ] >>136 randtime=`expr 0$((RANDOM*6/32768+5)) : '.*\(..\)'`
138 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 16:33:54 ] rand() { dd if=/dev/random bs=1 count=2 2>/dev/null | od -A n -t u } randtime=$(printf "%02d" $(( 5 + $(rand) % 6 )))
139 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 17:01:40 ] 純正シェル、かつ、printf(1)なし環境でも動く方法: randtime=`expr 0\`expr \\\`date +%S\\\` % 6 + 5\` : '.*\(..\)'` ` `が3重ネストしてるので注意。
140 名前:名無しさん@お腹いっぱい。 [2008/06/01(日) 19:57:10 ] (;ω;)たちけて〜 #!/bin/sh i=0 while [ $i -le 23 ] ;do time=`printf $i"%02d\n"` i=`expr $i + 1` echo $time done ↓結果↓ ↓目的↓ 000 0000 100 0100 200 0200 ・・・略 1000 1000 1100 1100 ・・・略 2300 2300 0000〜2300 最初から出力4桁にしたいでつ・・・ どこがおかしいのかおせいて〜(;ω;)ブワッ
141 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 20:02:40 ] printf "%02d00\n" {01..23}
142 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 20:18:41 ] >>140 i=0;while [ $i -le 23 ];do printf '%02d00\n' $i;i=`expr $i + 1`;done >>141 bash依存失格。
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 20:33:37 ] seqが使えるなら seq -f "%02g00" 0 23 awkで書くなら awk 'BEGIN { for (i = 0; i < 24; i++) printf("%02d00\n", i) }'
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 20:51:55 ] printfがないOSもある。 i=0;while [ $i -le 23 ];do expr 0"$i"00 : '.*\(....\)';i=`expr $i + 1`;done
145 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 20:58:05 ] exprはどこにでもあるの?
146 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 21:05:12 ] exprもないOSのために、 純正シェルで、内部コマンドのみで実現。 z=0;set -;while [ $# -le 23 ]; do [ $# -ge 10 ] && z=; echo $z$#00; set "$@" d; done
147 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 23:56:19 ] >>140 でつ >>141 エラーが出てしまった・・・・・・{01..23}の書き方はzshらしいです >>142 でけた! >>143 sedあります! あ、seqか 出来た出来たです! >>144 printfあるけどその方法もでけた! >>145 Linux/FedoraとCentには入ってましたSunOSや*BSDは存じ上げません >>146 set の使い方がにくいですw >>142-146 Grateful !!
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 00:13:39 ] cat -n とか nl とか使う手もあるよね
149 名前:名無しさん@お腹いっぱい。 [2008/06/02(月) 01:37:46 ] Bシェルで質問です。 あるディレクトリのstyファイルの文字コードを全てnkf -sで変換するシェルを作りたいのです。 しかし、全てのファイルに対して操作する方法がわかりません。 つまり、 nkf -s *.sty > *.sty2 mv *.sty2 > *.sty rm *.sty2 みたいなことがやりたいんですが、この部分どうしたらいいのでしょうか。
150 名前:名無しさん@お腹いっぱい。 [2008/06/02(月) 01:58:11 ] >> 149 for i in *.sty; do nkf -s $i > $i.sjis; mv $i.sjis $i; done
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 01:59:07 ] find使う
152 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 09:07:16 ] >>149 シェルってゆうな。クズ。
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:15:53 ] >>149 nkf -s --overwrite *.sty
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:19:34 ] シェルってゆうなってうるさい奴ってなんなの?バカなの? スクリプトのスレなんだから分かるだろうが。氏ねよめんどうくせえ
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:23:38 ] HDDのバックアップを効率的に行なうシェルを発光したいんですが、 初心者でも簡単にできますか?
156 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:25:29 ] スルーできないやつってなんなの?
157 名前:名無しさん@お腹いっぱい。 [2008/06/02(月) 11:27:00 ] お助けください。 .(ドット)で区切って後ろから1番目と2番目を抜き取るにはどうしたらいいでしょうか? 例えば aaa.bbb.ccc.dddをccc.dddに置換したいです。
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:30:19 ] >>157 sed 's/[^\.]*\.[^\.]*\.//' cut -d. -f3-
159 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:32:03 ] あ、前2つを削るんじゃなく後ろ2つを残すのか。
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:33:56 ] >>157 hoge=aaa.bbb.ccc.ddd expr $hoge : '.*\.\([^.][^.]*\.[^.][^.]*\)' と言うシェルが発酵できます。
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:48:33 ] 純正シェル、内部コマンドオンリーバージョンを求めるなら、 hoge=aaa.bbb.ccc.ddd IFS=. set $hoge while [ $# -gt 2 ]; do shift; done echo $1.$2
162 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:52:17 ] echo "aaa.bbb.ccc.ddd" | sed -e 's/^\(.*\)\.\([^\.]*\)\.\([^\.]*\)$/\3.\2/'
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 11:53:41 ] ごめん。なんで \2 \3を入れ替えたんだろう?w echo "aaa.bbb.ccc.ddd.eee" | sed -e 's/^\(.*\)\.\([^\.]*\)\.\([^\.]*\)$/\2.\3/'
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 12:38:02 ] 腐ってやがる 早すぎたんだ
165 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 13:11:19 ] >>155 rsyncかddでググれ。 話はそれからだ。
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 13:18:04 ] >>165 発光は?
167 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 17:16:08 ] echo ^G
168 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 17:22:42 ] vbell限定だた
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 17:24:11 ] while : do xset led 1 sleep 1 xset -led 1 sleep 1 done
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 17:35:15 ] for hoge in *.*.* do mv $hoge $(echo $hoge |awk -F. '{print $(NF-1)"."$NF}') done
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 17:36:25 ] あ、違った
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 19:32:14 ] banner をもっと長い文字列で使いたいんですが
173 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:28:24 ] そうですか
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:34:12 ] 自分で発光したシェルをコマンド化するにはどうするんですか? もしかして、コンパイルとか打つんですか?
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:39:12 ] そーでーす
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:45:14 ] ふたつのテキストファイルがあったとします。 テキストファイルの中の文章は単語が改行で区切られています。 $ cat 1.txt apple book cat desk earth fuck $ cat 2.txt april born cook dinner engine fuck 1.txt と 2.txt で完全一致しているものを抽出するシンプルな方法を 探しています。何か良い方法ありませんか?
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:55:33 ] sortしたものをdiffやcommに食わせるのが簡単だけど。 並べ替えアウト?
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:59:29 ] それぞれ、中身に同じ行がないなら、 sort 1.txt 2.txt | uniq -d かな
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 22:02:55 ] >>177 OKです。 >>178 完璧です。ありがとうございました。
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 00:15:13 ] sh -c 'echo $1' a b c で、b が出るのは正常?
181 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 00:39:14 ] 正常
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 02:06:40 ] >>158 >>160 >>161 ありがとうございました!感謝!
183 名前:名無しさん@お腹いっぱい。 [2008/06/03(火) 03:43:47 ] 質問です。 aaa=`commando1` bbb=`commando2` このような「``」内のコマンドを1つにまとめるにはどうしたらいいでしょうか? 例えば #!/bin/sh temp=`ls -l $1` pram=`echo $temp | cut -d " " -f 6-8` echo $pram tempとpramで分けてるものを1行でまとめたいです。
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 04:07:13 ] ネストすればいい。
185 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 06:53:17 ] >>183 ネストする必要ない。というか、tempに入れる必要ない。 pram=`ls -l $1 | cut -d " " -f 6-8`
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 12:01:25 ] >>184 一般論の話だろ。 その例に限れば、それでいいけど。
187 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 12:44:26 ] POSIXシェルを仮定して「$()」使うのが正解。
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:08:58 ] >>187 アフォか
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:12:22 ] >>183 一般論として、 aaa=`command1` bbb=`command2 $aaa` なら、 bbb=`command2 \`command1\`` で桶。
190 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:17:54 ] >>188 なんで?
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:19:05 ] 純正シェルで動かないから。 >>189 という正解があるのに、わざわざポータビリティを落す $()を使う必要ないから。
192 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:21:04 ] >>191 可読性が落ちる。
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:22:50 ] >>192 それはシェルに慣れてないお前だけ。
194 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:23:46 ] 3重、4重のネストが必要なときはどうするのだ? www 大半のシステムで使用できる$()を避けて可読性を劣化させる必要は無い。 このスレに巣食っている原理主義者以外は$()使うのが正解。
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:24:12 ] >>181 一般論として仮定しちゃって良い?
196 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:24:13 ] 可読性を言うなら、むしろネスティングを避けて 一旦別変数に入れる方式の方がいいぞ。 >>183 の質問の逆をやれってことね。
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:24:53 ] >>194 Solarisは大半のシステムじゃないのかい?
198 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:27:12 ] Solaris?なにそれ、おいしいの?
199 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:34:17 ] Solarisを見落としていた >>194 の負けだな
200 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:36:22 ] >>194 3重ネストは \\\`command\\\` 4重ネストは \\\\\\\`command\\\\\\\` 何か問題ある?w
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 13:41:28 ] Solarisならば、普通kshかxpg4シェル。
202 名前:名無しさん@お腹いっぱい。 [2008/06/03(火) 20:09:41 ] 質問させてください。 テキストファイルの内容が以下のようになっています。 日付 文字列 上記文字列に改行コードが存在する場合、以下のようになります 20080602 aaabbbccc 20080602 dddee ef ff 20080602 ggghhhiii これをこのように正しく変換するにはどうしたらいいでしょうか? 20080602 aaabbbccc 20080602 dddeeefff 20080602 ggghhhiii
203 名前:名無しさん@お腹いっぱい。 [2008/06/03(火) 20:18:28 ] 202の続き とりあえずない頭を絞って先頭文字が「2008」でない行に|を入れて以下のような レイアウトにし 例) 20080602 aaabbbccc 20080602 dddee |ef |ff 20080602 g |gg |hhhi |ii 過去ログにあったコマンドを参考に以下のコマンドを実行しましたが 「(rm a.txt; sed 'N; s/\n|//; P; D' > a.txt) < a.txt 」 例) 20080602 aaabbbccc 20080602 dddeeef |ff 20080602 ggg |hhhiii と、いった感じですべて変換することができません。 よろしくお願いします。
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 20:41:47 ] >>202 これでどうだ。 頭に余分な空行が出るのは無視してね ↓ while read line do set $line if [ $# = 1 ]; then echo -n $1 else echo echo -n $1 $2 fi done < file.txt echo
205 名前:名無しさん@お腹いっぱい。 [2008/06/03(火) 21:33:33 ] >>204 ありがとうございます。 すみません。わたしの記載漏れになりますが文字列の中にはスペースも存在します。 詳しく言いますとこの文字列とはSQLなのです。 なので「select * from table」のようになります。 せっかく考えて頂いたのにすみませんでした。
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 21:38:11 ] 後出し乙。これで回答を得られることはないであろう。
207 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 21:46:02 ] わしが代わりに答えてあげよう。 正解のmd5じゃ。 9c42265ebade7ace4e45b75b8d41f7ab
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 22:45:18 ] 初心者な質問ですいません。 自分で書いたシェルをコマンドとして発光するにはどうするんですか?
209 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 22:47:26 ] 発酵させるには、ながーい時間がかかるよ
210 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 23:22:26 ] >>207 お題を自分で解いた(かもしれない)だけで、答えたことになってないよな
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 06:27:08 ] >>207 そのmd5逆算したところ、確かに動きました。感謝です。
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 07:33:03 ] すげぇなおい
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 11:28:09 ] >>202 どっちも書き方として邪道かつ汚いけど結果オーライなら。 cat $SQL_FILE | awk '{ if(/^20[0-9]+ /) { printf "\n"; } printf $0; } END { printf "\n" }' cat $SQL_FILE | perl -ne 'chop; print "\n" if(/^\d{8}\s/); print; END{ print "\n" }'
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 15:08:22 ] 全然シェルスクリプトじゃない件
215 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 15:17:43 ] #!/bin/sh awk '{ if(/^20[0-9]+ /) { printf "\n"; } printf $0; } END { printf "\n" }'
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 15:22:33 ] awkスレと聞いて
217 名前:215 mailto:sage [2008/06/04(水) 15:27:14 ] まぁ >>6 にも入ってるし、sed awk はテキスト処理では欠かせないな。 >>213 は、改行コードの扱い方が珍妙で、よく出来てると思った。
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 23:33:14 ] 192168000001 を 192.168.0.1 に変換するスマートな方法を教えてください。 一オクテットが、3 ケタずつに区切られています。
219 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 23:43:18 ] echo 192168000001 | sed 's/.../& /g' | awk '{print $1+0 "." $2+0 "." $3+0 "." $4+0}'
220 名前:202 mailto:sage [2008/06/04(水) 23:45:50 ] >>213 ありがとうございます。 出来ました。 なるほど改行コードを削除することに躍起になっていましたが、 マッチした時だけ前に改行コードを付けるというやり方もあるんですね。 なかなか思いつかない発想だったので勉強になりました
221 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/04(水) 23:54:42 ] echo 192168000001 | sed 's/.../&./g;s/¥.0*/./g;s/¥.¥./.0./g;s/¥.$//' s/¥.00?/./ とか書きたいにゃー。
222 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 00:02:30 ] echo 192168000001 | sed 's/.../& /g;s/ $//;s/ /./g'
223 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 05:47:11 ] sh -c 'echo fugafuga' と eval 'echo fugafuga' が異なるのは、どのような時なのでしょうか。 fugafugaの部分は任意です。