1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/ Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/ Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
101 名前:login:Penguin mailto:sage [2008/06/09(月) 20:52:39 ID:1XPLtUDQ] 日本でもオンライン注文のピザ屋があれば出来そうね。 映画ジュラシックパークの中でプログラマーがデブでピザ食べていたけど、 この動画もその皮肉?
102 名前:login:Penguin mailto:sage [2008/06/09(月) 20:56:56 ID:zrUasBao] シェルスクリプトじゃないけど。 e8y.net/blog/2006/07/25/p126.html
103 名前:login:Penguin mailto:sage [2008/06/09(月) 21:02:45 ID:zrUasBao] >>101 hacker の食べ物といえば ピザと Jolt Cola と相場が決まっておる。
104 名前:login:Penguin mailto:sage [2008/06/10(火) 00:00:50 ID:Uz5XyeDf] なんだPizza Partyか slashdot.jp/article.pl?sid=04/05/08/0858242
105 名前:login:Penguin [2008/06/10(火) 13:27:23 ID:Gys5ZtGT] 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ → →2481211→ → →2481211→↓ tomo.txtの中身はこうなっています。(→はタブ、↓は改行コードです) これで2列目に何も文字列が入っていない場合は3列目も何も文字列を 入れないようにしたいです。(上のtxtの場合だと下の2行が対象になります) sedとcutでなんとかなるかと思ったんですけどなかなかうまくいきません。 誰かいいスクリプトを教えて下さい。宜しくお願いします。
106 名前:login:Penguin mailto:sage [2008/06/10(火) 14:03:41 ID:rnP/TIGa] これでどう? awk '{if (length($2) != 0) print;}' tomo.txt
107 名前:105 [2008/06/10(火) 15:27:43 ID:Gys5ZtGT] 早速のレスありがとうございます。でもうまく動かないです。。。 試しにlengthの値を変えてみたりしたんですが何も変化がないです。。
108 名前:login:Penguin mailto:sage [2008/06/10(火) 16:24:40 ID:mINSOvv3] >107 もっと具体的に目的を書かないとどういう結果が欲しいのか解らんよ。 >105の下から2行目は改行が入ってないの? それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故? まあ、やりたいことを推測して例を出せばこんな感じか? cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done
109 名前:105 [2008/06/10(火) 19:02:47 ID:CM93IypP] >>108 さん ご回答ありがとうございます。 すみません。 >105の下から2行目は改行が入ってないの? 入ってます。 >それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故? 実際には入っていません。 ですから正確にはtomo.txtはこうなってます。 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ →→2481211→↓ →→2481211→↓
110 名前:105 [2008/06/10(火) 19:05:04 ID:CM93IypP] それを以下の下2行の2列目に文字列がない場合は 削除したいので以下のような結果を出して欲しいんです。 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ →→→↓ →→→↓ 何度もすみません。よろしくお願いします。
111 名前:105 [2008/06/10(火) 19:19:42 ID:CM93IypP] cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done を試してみましたけどやはり何も変化はありませんでした。 すみません。お願いします。
112 名前:login:Penguin mailto:sage [2008/06/10(火) 19:35:16 ID:gcco3DVH] よくわからんけど、タブが2回続いたらタブ3個だけの行に置き換えるとかじゃだめなの? やり方は知りません
113 名前:login:Penguin mailto:sage [2008/06/10(火) 21:34:41 ID:39ga6S1g] これはどうだ? awk -F '¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt awkのデフォの列識別はタブじゃないから-Fで指定してね。
114 名前:105 [2008/06/11(水) 03:27:04 ID:bnnOzDXT] >>113 ありがとうございます。今日はこんな時間なので明日試してみます。 '\t'の部分がうまく識別してくれたらいけそうな感じがします。
115 名前:105 [2008/06/11(水) 05:10:34 ID:bnnOzDXT] おはようございます。 今試してみたらうまく動きました。ありがとうございました。
116 名前:login:Penguin mailto:sage [2008/06/11(水) 05:47:46 ID:wK/2Md+f] >>114 >>115 明日ってw
117 名前:105 [2008/06/11(水) 08:14:21 ID:sVHDZWwZ] あっーーー!よくみたら 2037→1048→2481207→↓ 2037→1048→2481207→↓ 20311→1056→2481211→↓ 20320→1114→2481218→↓ 20320→1114→2481218→↓ 20326→1155→2481211→↓ 20326→1155→2481211→↓ ↓ ↓ って感じで最後の2行のタブが全部消えてました。。。 これは消えると困るんです。再度お願いします。。。
118 名前:login:Penguin mailto:sage [2008/06/11(水) 08:47:58 ID:uz75y6lZ] 難問が…
119 名前:login:Penguin mailto:sage [2008/06/11(水) 10:00:16 ID:NnMk6hEw] >112でいけるだろ sed -e 's/\t\t[^\t][^\t]*/\t\t/' tomo.txt \tが使えなかったらタブで置きかえる。
120 名前:login:Penguin mailto:sage [2008/06/11(水) 10:14:39 ID:tvbxZjG7] >>117 あり? $2 = ""をしない行はちゃんとタブで分けたまま出力してるのに 置き換えをした行はスペースが出力区切り文字になっちゃうな。 じゃ、無理矢理修正 awk -F '¥t' -v OFS='¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt OFS はoutput field separator
121 名前:105 [2008/06/11(水) 11:52:44 ID:sVHDZWwZ] ありがとうございます! 今度こそ大丈夫です!本当にありがとうございます!
122 名前:login:Penguin mailto:sage [2008/06/11(水) 22:25:09 ID:8Wsl19+C] Open Foundation Software じゃないのか。
123 名前:login:Penguin mailto:sage [2008/06/12(木) 00:10:41 ID:JqmZrOtu] >>122 OSFですがw Open Software Foundation
124 名前:login:Penguin mailto:sage [2008/06/12(木) 11:24:21 ID:irJT+vdW] 誰かピザハット対応ピザ注文コマンド作ってくれないものか。
125 名前:login:Penguin mailto:sage [2008/06/12(木) 11:52:43 ID:3DTOjPry] >>124 出前館にあるみたいだから、>>102 をいじれば作れるんじゃない?
126 名前:login:Penguin [2008/06/12(木) 12:44:22 ID:Y4yiWWC/] #xxx.txtの1行目を変数iに代入します for i in `cat xxx.txt` do #xxx.txtの2行目を$jに入れます j=`sed -n '2p' export j #変数eeeにxxx.txtの2行目から15行目を代入します eee=`sed -n '2-15p' export eee #pasteで結合できるように変数をtxtファイルに入れます echo $i > i.txt echo \t > ccc.txt echo $eee > eee.txt if #xxx.txtの行の先頭が20から始まる場合 then test $j = "^20" #結合します paste i.txt ccc.txt eee.txt else #何もしない fi done 初心者です。こんなスクリプトを作ったんですけどうまく動きません。 修正していただけるとありがたいです。お願いします。
127 名前:126 [2008/06/12(木) 12:55:44 ID:Y4yiWWC/] #xxx.txtの1行目を変数iに代入します for i in `cat xxx.txt` do #xxx.txtの2列目を$jに入れます j=`sed -n '2p' export j #pasteで結合できるように変数をtxtファイルに入れます echo $i > i.txt echo \t > ccc.txt if #xxx.txtの行の先頭が20から始まる場合 then test $j = "^20" #結合します paste i.txt ccc.txt eee.txt else #何もしない fi done 間違えました。eee.txtは別途作りますので上記のような感じです。
128 名前:login:Penguin [2008/06/12(木) 14:03:25 ID:Y4yiWWC/] 意味不明ですみません。会社から回りの人の目を盗みながら こそこそと2ちゃんねるやってるんで・・・ これでお願いします。 #変数aaaにxxx.txtの1行目を代入します for aaa in `cat xxx.txt` do #変数bbbにxxx.txtの2行目を代入します bbb=`sed -n '2p' export=bbb #変数cccに$iの1列目を代入します ccc=`cat $i | cut -f1` export=ccc #変数dddに$iの2から14列目を代入します ddd=`cat $i | cut -f2-14` exprot=ddd if #xxx.txtの2行目の先頭行が20の場合は切り出したファイルを結合します then test $aaa = "^20" paste ccc.txt tab.txt ddd.txt elsei #それ以外の場合はその列をそのままファイルに書き出します echo aaa.txt fi done
129 名前:login:Penguin mailto:sage [2008/06/12(木) 18:57:20 ID:RuYhMH5C] >>126 日本語でおk 人に説明するためにやりたいことを整理すると自然に解決したりするものよ。
130 名前:login:Penguin mailto:sage [2008/06/12(木) 19:11:00 ID:3DTOjPry] 最初に for を持ち出したところからすでに意図がわからん。
131 名前:login:Penguin mailto:sage [2008/06/12(木) 19:16:11 ID:kPFkNEQb] perlでやればいいと思うよ
132 名前:126 [2008/06/12(木) 19:28:24 ID:TxRWHMwb] >>129 ありがとうございます。でもなかなかうまくいかないんです。 >>130 すみません。for文の処理がうまくいかないんで抜粋しました。 >>131 perlは全然わかんないんでなんとかシェルでやりたいです。
133 名前:login:Penguin mailto:sage [2008/06/12(木) 20:00:58 ID:48VJya+Z] 任意の時間を入力し、それをUTC時間に変換することは可能でしょうか? dateコマンドだとカレントタイムを変換してしまうので。。
134 名前:login:Penguin mailto:sage [2008/06/12(木) 20:55:58 ID:JwqUhAVV] date -u じゃダメなのかな
135 名前:login:Penguin mailto:sage [2008/06/12(木) 21:14:33 ID:lC+5xa2L] それに -d オプションを付けたいんじゃないのかな。 $ date -u -d '2001/5/20 13:33:35 JST'
136 名前:login:Penguin mailto:sage [2008/06/12(木) 21:41:49 ID:JqmZrOtu] >>133 awkにあるmktime, strftime関数を使うのが一番手軽かな。
137 名前:133 mailto:sage [2008/06/12(木) 23:39:42 ID:mOwz8//t] >>134-136 実現できました! 即レス助かりました。ありがとうございます。
138 名前:login:Penguin mailto:sage [2008/06/13(金) 08:03:49 ID:TrNV+QBw] >>126 は解決したのだろうか。 俺には意図が解らなかったが。
139 名前:126 [2008/06/13(金) 09:47:03 ID:j8pwVaea] >>138 心配していただきありがとうございます。まだ未解決です。 簡単にいうと aaa.txtが [100] 201 202 203 [200] 301 302 303 となっている場合に [100] 201 [100] 202 [100] 203 [200] 301 [200] 302 [200] 303 としたいんです。(スペースのところはタブ区切りを入れたいです) お願いします。
140 名前:login:Penguin mailto:sage [2008/06/13(金) 10:12:43 ID:+c/4qhZ/] #!/usr/bin/perl my $i = ''; while (<>) { chomp; if ($_ eq '') { $i = ''; print "\n"; } elsif ($i eq '') { $i = $_; } else { print "$i\t$_\n"; } }
141 名前:126 [2008/06/13(金) 10:25:54 ID:j8pwVaea] >>140 それを今試してみたら [100] [100] 201 [100] 202 [100] 203 [100] [100] 301 [100] 302 [100] 303 みたいになっちゃいました。 せっかくコードを書いていただいたのですがちょっと 結果が違いました。すみません。
142 名前:login:Penguin mailto:sage [2008/06/13(金) 10:28:27 ID:5MIbjJC0] > 126 awk 'BEGIN {OFS = "\t";}; $0 != "" {if ($0 ~ /^\[/) section = $1; else print section, $1}' aaa.txt 多分もっと格好よくできるはずなんだけどなぁ
143 名前:login:Penguin mailto:sage [2008/06/13(金) 10:38:47 ID:obeusV/U] >>139 gawk '{if(match($0,/^\[[0-9][0-9]*\]$/))t=$0;else{if(length)$0=t "\t" $0;print;}}' aaa.txt sed -e '/^\[[0-9][0-9]*\]$/{h;d}/^..*/{x;G;s/\n/\t/;p;s/\t.*//;h;d}' aaa.txt まだ短くならないかな。
144 名前:login:Penguin mailto:sage [2008/06/13(金) 10:43:39 ID:+c/4qhZ/] >>141 203 の次の行は空行じゃないの?
145 名前:login:Penguin mailto:sage [2008/06/13(金) 10:45:41 ID:+c/4qhZ/] >>126 > #変数eeeにxxx.txtの2行目から15行目を代入します > #xxx.txtの行の先頭が20から始まる場合 最初と言ってることぜんぜん違うじゃねーか。
146 名前:126 [2008/06/13(金) 11:04:27 ID:j8pwVaea] >>142 おおおっ。すごいです。ありがとうございます。 で、あまりにも簡単に説明しすぎたせいで少し動作が違いました。 実際にはaaa.txtは複数の列でできています。 [100] 201 100 200 202 100 200 203 100 200 "" [200] 301 100 300 302 100 300 303 100 300 "" あと先頭が数字では始まらないけど文字列が入っている場合もあります。 その列は何も処理をしたくないんです。もちろん空白の列にも何も処理をしたくないです。 説明が不足していてすみません。お願いします。
147 名前:login:Penguin mailto:sage [2008/06/13(金) 11:08:06 ID:+c/4qhZ/] どんどん条件変わるな。 もう付き合いきれん。
148 名前:login:Penguin mailto:sage [2008/06/13(金) 11:09:51 ID:+c/4qhZ/] >>140 を好きに改造して使ってくれ。
149 名前:login:Penguin mailto:sage [2008/06/13(金) 11:57:53 ID:5MIbjJC0] >>126 #!/usr/bin/awk BEGIN { OFS = "\t" } { if ($1 ~ /^\[.+\]$/) { section = $1 } else if ($1 ~ /^[0-9]/ ) { sub(FS, OFS) # これがいるかどうか分からない print section, $0 } else { print } } まぁ暇だし,自分の勉強にもなるしな
150 名前:126 [2008/06/13(金) 12:12:09 ID:j8pwVaea] >>147 ごめんなさいごめんなさい。許して下さい。 >>148 ありがとうございます。今から試してみます。感謝してます。
151 名前:126 [2008/06/13(金) 12:24:52 ID:j8pwVaea] >>149 ^ syntac error ^ 正規表現が終端がされていません って出ます。 そのコードを2.awkとして保存してchmod 755 で ./2.awk < aaa.txt > bbb.txt としたんですけど僕のやりかたが悪かったんでしょうか。 もうちょっと試してみます。すみません。
152 名前:login:Penguin mailto:sage [2008/06/13(金) 13:34:55 ID:frtx8yVp] シェルとかプログラミング言語よりも,ちゃんと説明できる日本語を習得するのが先だとしみじみ思う.
153 名前:126 [2008/06/13(金) 13:45:24 ID:j8pwVaea] awk -f ./2.awk < aaa.txt > bbb.txt で実行できました。すみません。 でも結果としては数字のところにタブが挿入されただけでうまくいきませんでした。 また時間がある時にで結構ですので教えてくださると助かります。よろしくお願いします。
154 名前:126 [2008/06/13(金) 14:31:16 ID:j8pwVaea] あれれ。すみません。aaa.txtを作って試してみたらうまく動作してました。 元データのほうに何か問題があるようです。確認してみます。
155 名前:126 [2008/06/13(金) 14:57:25 ID:j8pwVaea] >>149 ありがとうございます。感謝感謝です。 if ($1 ~ /^\[.+\]$/) { を if ($1 ~ /^\[.+\]*$/) { にして無事動作しました。[]の後ろに文字列が入っているのが原因でした。 本当にありがとうございます。
156 名前:login:Penguin mailto:sage [2008/06/15(日) 03:39:35 ID:sc6xQlic] #!/bin/sh n=`cat text.txt` で読み込んだ$nに対して 一行ずつ処理を行いたいのですがどうしたらよいでしょうか for a in $n を使おうと思ったのですが、スペースでも分割されてしまい 理想の動作をさせることができません よろしくお願いします
157 名前:login:Penguin mailto:sage [2008/06/15(日) 04:58:13 ID:wo2EqLas] cat text.txt | while read line; do echo "$line"; done while read line; do echo "$line"; done < text.txt ダブルクオート
158 名前:login:Penguin mailto:sage [2008/06/15(日) 07:24:02 ID:Wqtu/af2] done < text.txt はbash依存だったような
159 名前:login:Penguin mailto:sage [2008/06/15(日) 09:18:42 ID:sc6xQlic] >>157 できましたありがとうございます! whileの中でreadを再び使えば同時に何行まとめて、という処理が出来るんですね
160 名前:login:Penguin mailto:sage [2008/06/15(日) 09:44:47 ID:riPFD/ci] >>158 Linux板的にはいいんでないの。 Unix板だったら気にしたほうがいいかもしれんが。
161 名前:login:Penguin mailto:sage [2008/06/15(日) 10:19:04 ID:+vOR/R57] >>158 /bin/shでも動くからおk
162 名前:login:Penguin mailto:sage [2008/06/15(日) 10:47:11 ID:Wqtu/af2] dashもOKだから、まぁいいのか
163 名前:login:Penguin mailto:sage [2008/06/15(日) 12:04:09 ID:MYPOmB3X] そのあたりってPOSIXでちゃんと規定されてるものなの? 単にbashをまねて取り込んだshなのか、真のshからサポートする機能か どうしたら見分けつけられるのかよくわからない。
164 名前:login:Penguin mailto:sage [2008/06/15(日) 12:33:26 ID:+vOR/R57] www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
165 名前:login:Penguin mailto:sage [2008/06/15(日) 12:43:50 ID:cU/mpVoU] bash や dash があるなら、cash もあるのかな。 Csh-Again SHell とか。
166 名前:login:Penguin mailto:sage [2008/06/15(日) 12:53:50 ID:MYPOmB3X] >>165 生まれ変わらなくていい。そのまま墓場で寝ててくれ>*csh
167 名前:login:Penguin mailto:sage [2008/06/15(日) 12:56:31 ID:MYPOmB3X] >>164 トン。$(command)とか$((expr))って標準だったんだとか色々勉強になるな。
168 名前:login:Penguin mailto:sage [2008/06/15(日) 18:20:40 ID:ue0hzIrD] bashで文字列の最後尾が / にあたるものをヒットさせたいのですが、どのようにしたら宜しいでしょうか?
169 名前:login:Penguin mailto:sage [2008/06/15(日) 18:49:35 ID:LSl6/nZ+] bashにそんな機能はない
170 名前:login:Penguin mailto:sage [2008/06/15(日) 18:53:49 ID:aTr7Cyki] bash()笑
171 名前:login:Penguin mailto:sage [2008/06/15(日) 18:54:17 ID:2ND6A6mz] grepで$を使うって話?
172 名前:login:Penguin mailto:sage [2008/06/15(日) 19:14:12 ID:AOTtbX65] エスケプすればなんとでも。
173 名前:login:Penguin mailto:sage [2008/06/15(日) 19:23:37 ID:lWrIWsAm] >>168 case "$str" in */) echo "match." ;; *) echo "unmatch." ;; esac
174 名前:login:Penguin mailto:sage [2008/06/16(月) 02:02:05 ID:irk9chgy] >>168 です。仕事が入ってしまいレス遅れました、すいません。 bashにそのような機能はありませんか・・・。 grepでは無く条件式で文字列の末尾を判定させたかったのですが 何も知らない自分としては>>173 さんの書いて頂いたのを参考に しようかと思います。助かりました、有難うございます。
175 名前:login:Penguin mailto:sage [2008/06/16(月) 08:11:50 ID:JECOF4SI] >>169 に対する皮肉としか読めない。
176 名前:login:Penguin [2008/06/16(月) 11:27:24 ID:1Ms3xCVR] #!/bin/csh -f set s=$1 set t=$2 set f=$3 cat $f | tail +$s | head -$t exit 0 echo ------------------ 以上を改良しろ、と言われました。みなさんならどうしますか?どなたか教えて下さい。
177 名前:login:Penguin mailto:sage [2008/06/16(月) 11:28:31 ID:/AfhYEBu] >>176 *csh を使うのをやめる。まずそれからだ。
178 名前:login:Penguin mailto:Sage [2008/06/16(月) 12:44:56 ID:qvjZYD3V] >>176 速度面で改善ならアセンブリで書き直してやれ
179 名前:login:Penguin mailto:sage [2008/06/16(月) 13:59:17 ID:6AAfiJB4] >>176 とりあえずマルチをやめること
180 名前:login:Penguin mailto:sage [2008/06/16(月) 23:26:05 ID:gSPrzSdg] >>176 次に日本語を勉強すること
181 名前:login:Penguin [2008/06/17(火) 07:40:56 ID:AmqP2Db0] abc bcd cde <abc> hoge hoge (スペースはタブです) となっている場合、<abc>の列を削除したい場合 sed 's/\t//g' | sed "s/<abc>*//g" > hoge だとうまくいかないんですけどどこかおかしいんでしょうか。 ご指摘お願いします。
182 名前:login:Penguin mailto:sage [2008/06/17(火) 08:11:56 ID:+a7Qx5aV] >>181 sed 's/^<abc>.*//' * は「前のものの0回以上の繰り返し」。 シェルの glob と違って「任意の文字列」ではない。
183 名前:login:Penguin [2008/06/17(火) 08:57:44 ID:AmqP2Db0] >>182 ありがとうございます。試してみます。
184 名前:login:Penguin [2008/06/17(火) 10:01:29 ID:AmqP2Db0] 先程はありがとうございました。今度はまた問題が出ました。 aaa bbb ccc ddd eee となっているファイルに例えばcccの行にだけ行頭にタブを二ついれたいんですけど どうすればいいでしょうか。検索してみたんですけどそんなことをする例がないので わからないです。お願いします。
185 名前:login:Penguin mailto:sage [2008/06/17(火) 10:12:39 ID:+a7Qx5aV] >>184 sed 's/^ccc$/\t\tccc/'
186 名前:login:Penguin [2008/06/17(火) 11:07:44 ID:AmqP2Db0] >>185 ありがとうございます。 でも僕の例の出しかたが悪かったです。正確には英語じゃなくて日本語なんです。 あああ いいい ううう えええ おおお となってて「ううう」の先頭行に処理をしたいんです。 本当にすみません。
187 名前:login:Penguin mailto:sage [2008/06/17(火) 20:22:32 ID:RyDH/vmA] 同じ人が、ここ10日ぐらい似たような質問を繰り返しているような気がしてならない。
188 名前:login:Penguin mailto:sage [2008/06/17(火) 21:23:10 ID:yjVz7+7h] >>187 わわわ たたた ししし ももも そそそ ううう おおお ももも いいい ままま すすす
189 名前:login:Penguin mailto:sage [2008/06/18(水) 07:36:46 ID:U0oDy3CU] >>186 $ cat aiueo.txt あああ いいい ううう えええ おおお $ sed 's/^ううう/\t\tううう/' aiueo あああ いいい ううう えええ おおお >>185 の例と全く同じにできるんだが、お前は試しもせずに文句ばっかりたれとんのか。 いい加減にしろデコスケ!
190 名前:login:Penguin mailto:sage [2008/06/18(水) 21:41:14 ID:wntHkGxD] >>189 うっせえよ秋葉原殺傷事件予備軍。
191 名前:login:Penguin mailto:sage [2008/06/18(水) 22:06:13 ID:POz9Y1nl] Debian etch使ってるんだが初期設定のスクリプトって作れたりする? 例えば・・ /etc/apt/sources.list OS全体のフォント設定 必要なツールなどインスコ などなど・・ 複数台にインスコするのはいいけど初期設定がマンドイ・・
192 名前:login:Penguin mailto:sage [2008/06/19(木) 00:14:33 ID:syeq8gZ9] >>191 やれば作れるんじゃね? がんばれ。
193 名前:login:Penguin mailto:sage [2008/06/19(木) 01:01:28 ID:x+K2/T6V] >>191 一番簡単なのはapache走っているサーバーにディレクトリ作り、そこの設定ファイルのテンプレとかを 置いておく。 そして新しいシステムの基本インスコをしてネットに繋がったら: wget hoge/~me/install-etch ./install-etch で、そのスクリプトの中でapt-getしたり設定ファイルを書き換えたり、必要なファイルをwgetで持って来て 置き直したりとかごちゃごちゃ書いておく。 RH系だったらkickstartがお薦め。 sargeでdebianのカスタムインストーラー作りも一時したけど えらくめんどくさかった。 最近はもっと優しくなったのかな?
194 名前:login:Penguin mailto:sage [2008/06/19(木) 01:15:35 ID:ETqS5qxr] >>192 おう >>193 ようはコマンドラインを書けばいいわけだよね。とりあえずこれやってみる。 Kickstartをググってみたら簡単そうだけどローカル鯖必要そうだね。 どうもでした。
195 名前:login:Penguin mailto:sage [2008/06/19(木) 01:32:21 ID:JFsnEc1J] すいません エスケープの使い方で質問させて下さい。 下みたいなスクリプトで #!/bin/sh A=tama B=mike for i in $A $B do tmp=`eval perl -e \'\$\a \= \"$i\"\; if \( \$\a \=\~ \/\^\\\S\+\(\\\S\{1\}\)\$\/ \) \{ print \"s\$\{ 1 \}x_player\" \}\'` echo "$tmp" done exit 0 一応こうすれば動くのですが、 perlの行のところにあるエスケープを減らしてすっきりさせたいのです。 良い方法を教えて下さい。
196 名前:login:Penguin [2008/06/19(木) 01:45:49 ID:syeq8gZ9] >>195 perl スクリプトを別ファイルに追い出す。
197 名前:login:Penguin mailto:sage [2008/06/19(木) 08:19:04 ID:k7GKeo3u] シェルに評価されてはいけない部分をシングルクォートする。 i=tama perl -e 'printf( "%s: nya-\n", '"$i"' )'
198 名前:login:Penguin mailto:sage [2008/06/19(木) 17:34:35 ID:qZMvy29K] shの質問です スクリプトがCtrl+Cなどで終了させられた時に特定の動作を持たせたいのですが どのようにすれば実装できるでしょうか?
199 名前:login:Penguin mailto:sage [2008/06/19(木) 17:37:01 ID:syeq8gZ9] >>198 trap
200 名前:login:Penguin mailto:sage [2008/06/19(木) 18:08:53 ID:qZMvy29K] >>199 ありがとうございますm(_ _)m
201 名前:login:Penguin mailto:sage [2008/06/19(木) 23:30:35 ID:JFsnEc1J] >>196 なるべく一つのファイルにまとめたいんで。。。アドバイスありがとうございます。 >>197 197さんのアドバイスを参考にして、perlの行を下のように書くと動きました。 tmp=`perl -e '$a = "'"$i"'"; if ( $a=~ /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'` しかし、こう書くと$aの前のシングルクォーテーションがバッククォーテーションで perlを実行した時に消えると思うのですが、sh -x で確認して見ると消えてません。 これで正しく書けているんでしょうか?勉強不足ですみませんがよろしくお願い致します。