1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? 【sed】シェルスクリプト総合@LINUX Part2【awk】 pc11.2ch.net/test/read.cgi/linux/1154578200/ pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
285 名前:login:Penguin mailto:sage [2007/10/29(月) 20:28:52 ID:vqPZDaQA] あ、思い出した。 255.255.255.255 -> 0xffffffff のように、IPv6表記を16進表記に変換する手続きを考えてくだちい。 f000::1 -> 0xf0000000_00000000_00000000_00000001 ("_"は不要) ff::169.254.88.24 -> 0x00ff0000_00000000_00000000_a9fe5818
286 名前:login:Penguin mailto:sage [2007/10/29(月) 23:28:48 ID:Hdkrl+3D] 完全に他人まかせだなぁ。 > ruby -rsocket -e 'p Socket.gethostbyname("ff::169.254.88.24")[3].unpack("C16").map{|c|format "%x",c}.join' "00ff00000000000000000000a9fe5818"
287 名前:login:Penguin mailto:sage [2007/10/30(火) 21:40:02 ID:Hmkhn1Qf] あー、目鱗。 gethostbyname()等を使えばいいのか。
288 名前:login:Penguin mailto:sage [2007/11/06(火) 00:15:33 ID:vKEt0xzk] あるコマンド(hoge)の結果が・・・ (カラム位置) [col1 col2 col3 col4] (コマンド出力) 0001 0002 * 0004 である場合にこの結果をset `hoge`で受けた場合、位置変数 $3に「*」が入ってくるようにbashのスクリプトを作成したい のですが現状ではどうやってもカレントディレクトリ配下の ファイル一覧が入ってきてしまいます。 何か良い手がありましたら教えて下さい。
289 名前:login:Penguin mailto:sage [2007/11/06(火) 00:55:19 ID:M5wBEVHJ] "`hoge`"
290 名前:login:Penguin mailto:sage [2007/11/09(金) 03:25:37 ID:r4+4tELy] >>289 オイオイ!w マジレスすると $ set -o noglob じゃないの
291 名前:login:Penguin mailto:sage [2007/11/09(金) 06:12:20 ID:BEUM5jSj] >>300 zenity を使うとシェルスクリプトで手軽な GUI が作れるぞ
292 名前:login:Penguin mailto:sage [2007/11/09(金) 08:21:31 ID:kDM6jkym] ttp://www.google.co.jp/search?hl=ja&q=zenity でトップに出て来るページは、もしかしてケンカを売ってますか? >最新のGnomeデスクトップを使っていても古いUnixユーザーはすぐにターミナルエミュレータを開いてしまいがちです。
293 名前:login:Penguin mailto:sage [2007/11/09(金) 12:05:22 ID:ei55nGr2] 文章全体から見てポジティブな物言いだと思うが...
294 名前:login:Penguin mailto:sage [2007/11/10(土) 01:20:06 ID:5ErO5tFm] zenity の使用例: jpg と mp3 をあわせて avi を出力するスクリプト 音声ファイルをビデオホスティングサイトに投稿時に使用 ==================================== #!/bin/sh # mp3jpg2avi.sh JPG_FILE=`zenity --title="JPG ファイルを選択してください" --file-selection` MP3_FILE=`zenity --title="MP3 ファイルを選択してください" --file-selection` zenity --title="質問" --question --text "変換開始しますか?" if [ $? = 0 ]; then ffmpeg -shortest \ -loop_input -f image2 -i $JPG_FILE \ -i $MP3_FILE \ -sameq output.avi fi ====================================
295 名前:login:Penguin mailto:sage [2007/11/10(土) 09:47:24 ID:9Zj/zooJ] >>292 Linuxから入った人だけど、Gnomeなんてマルチウインドウ端末エミュレータ支援ソフト西か見えません
296 名前:login:Penguin mailto:sage [2007/11/10(土) 11:07:23 ID:vw7Wu+HW] マルチウインドウ端末エミュレータ支援ソフト西やら マルチウインドウ端末エミュレータ支援ソフト力石やら マルチウインドウ端末エミュレータ支援ソフトホセ=メンドーサやら知らん。
297 名前:login:Penguin mailto:sage [2007/11/10(土) 11:19:14 ID:9Zj/zooJ] >>296 一応ここでタオル投げときますね。つ〜
298 名前:login:Penguin mailto:sage [2007/11/10(土) 18:43:49 ID:Skjd8N2z] そういやこの間表参道歩いていたら、 胸にでっかく 「マンモス西」 と書かれたTシャツを着たガイジンが 前からいきなり歩いてきてビビった。 東京は怖い街だよ。
299 名前:login:Penguin mailto:sage [2007/11/10(土) 19:19:41 ID:PRddAKpB] そんなアナタに engrish.com/
300 名前:login:Penguin mailto:sage [2007/11/10(土) 20:24:35 ID:Skjd8N2z] そこのこの写真に、"Photo courtesy of Paul Gilbert"ってあるけど、 あのポールギルバートなんだろうか? ttp://www.engrish.com/detail.php?imagename=Hate.jpg&category=Clothing&date=2001-11-03 日本に住んでたしなあ。
301 名前:HhMiKdKNVb mailto:vyqkae@ndzhjf.com [2007/11/12(月) 01:38:17 ID:J0HpIKvZ] hlUotX <a href="jtpkztrjwlma.com/">jtpkztrjwlma</a>, [url=ykcooubrqrga.com/]ykcooubrqrga[/url], [link=tvapeckiqvbf.com/]tvapeckiqvbf[/link], cygdvmjubaqg.com/
302 名前:login:Penguin mailto:sage [2007/11/13(火) 02:33:43 ID:tnRwnYpT] 恥を忍んで質問なのですが /home/me/ 以下にjpgファイルが数千有ります 中身はこんな感じなのですが 1082053423922.jpg 1082053508305.jpg 1082053537535.jpg 1082053614971.jpg 1082053699948.jpg 1082053732609.jpg 1082053763346.jpg 1082391828601.jpg 1082392563669.jpg 1083091232922.jpg この数千の*.jpgのファイルをディレクトリから読み込んで以下タグの中にディレクトリから読み インクリメンタルに全ての画像ファイルがリンク代入された状態で出力したいと思っています <div id="myGallery"> <div class="imageElement"> <h3>Item 1 Title</h3> <p>Item 1 Description</p> <a href="mypage1.html" title="open image" class="open"></a> <img src="images/foo/a.jpg" class="full" /> <img src="images/foo/a-thum.jpg" class="thumbnail" /> </div> ディレクトリから読み込んだfileの名前a.jpgににファイルの中が無くなるまで 置換したいという意味なのですが.. どうか、助言願えないでしょうかm(__ __)m
303 名前:login:Penguin mailto:sage [2007/11/13(火) 07:47:54 ID:xB6HVDtO] まずは「この数千の……」以降の文章を推敲して他人に理解できるよう 書き換える。
304 名前:login:Penguin mailto:sage [2007/11/13(火) 10:11:50 ID:VZT+kd7x] >>302 zphoto でも使ったら?
305 名前:login:Penguin mailto:sage [2007/11/13(火) 12:34:27 ID:v1//zET/] こういうことか? for f in `ls -1 /home/me` ; do echo '<img src="images/foo/'$f'" class="full" />'; done for f in `ls -1 /home/me | gawk '{gsub("\\\.", "-thum.");print}'` ; do echo '<img src="images/foo/'$f'" class="full" />'; done
306 名前:302 mailto:sage [2007/11/13(火) 14:02:39 ID:tnRwnYpT] >>303 深夜に回転数が落ちていまして申し訳ないですm(_ _)m >>304 それも考えたのですが、出来ればこちらの方が良いなと思いまして.. >>305 バッチリ書き出せました、もの凄い感謝なのですが thumとthum無しのイメージが交互に書き出すことが出来ると思います 教えていただいた物を各ディレクトリに置き換えたものが以下の物なのですが for f in `ls -1 /www/web_dir/photo_album/images/foo/`; do echo '<img src="images/foo/'$f'" class="full" />'; done for f in `ls -1 /www/web_dir/photo_album/images/foo/ | gawk '{gsub("\\\.", "-thum.");print}'` ; do echo '<img src="images/foo/'$f'" class="full" />'; done 1行目と2行目を並べて出力できるように努力したのですが... gawkの部分で引っかかってしまいます、というか1行目しかループしてくれません(T.T) 補足いただければと思うのですが、よろしくお願いします マジ感謝感激です shell sciptとawkの本もamazonしようと思っています
307 名前:302 mailto:sage [2007/11/13(火) 14:19:58 ID:tnRwnYpT] もうちょっとで出来そう...
308 名前:302 mailto:sage [2007/11/13(火) 15:05:30 ID:tnRwnYpT] 出来ました ありがとうございましたm(__ __)m
309 名前:login:Penguin mailto:sage [2007/11/13(火) 15:14:48 ID:MuKLiZO1] 最終的にどうやりましたか? 報告して下さい。
310 名前:302 mailto:sage [2007/11/13(火) 15:32:02 ID:tnRwnYpT] ディレクトリを作りthumnail入れてこれで出力できました for f in `ls -1 /www/web_dir/photo_album/images/foo/`; do echo '<div id="myGallery">'; echo '<div class="imageElement">' echo '<h3>Item 1 Title</h3>' echo '<p>Item 1 Description</p>' echo '<img src="images/foo/'$f'" class="full" />'; echo '<img src="images/foo-thum/'$f'" class="full" />'; echo'</div>'; echo ' '; done
311 名前:login:Penguin mailto:sage [2007/11/13(火) 15:42:18 ID:MuKLiZO1] ちなみにサムネールは thumnail じゃなくて thumbnail ね。
312 名前:302 mailto:sage [2007/11/13(火) 16:02:23 ID:tnRwnYpT] はい、ありがとうございました^^
313 名前:login:Penguin mailto:sage [2007/11/13(火) 18:23:44 ID:v1//zET/] >>306 ls -1 /www/web_dir/photo_album/images/foo/ | gawk '{gsub("\\\.", "-thum.");print}' ここだけ実行するとどうなるの?
314 名前:login:Penguin mailto:age [2007/11/16(金) 18:50:01 ID:q8UeZNS0] ls -d /a/b/c/d/*/ のようにコマンドを打ち込むと /a/b/c/d/hoge1 /a/b/c/d/hoge2 /a/b/c/d/hoge3 のように出力が帰ってきますよね。この中から hoge1, hoge2, hoge3 の部分のみ、つまり ディレクトリ階層の一番深い部分のディレクトリ名 のみを得る為にはどうすれば良いのでしょうか?シェルスクリプト内で必要なのですが 分かりません。教えてください。 自分で調べた限りだと basename とか dirname がそれに近そうだったのですが、 ちょっと違うようです。他には見つけることが出来ませんでした。
315 名前:login:Penguin mailto:sage [2007/11/16(金) 18:54:10 ID:PPFIsM3H] >>314 > のように出力が帰ってきますよね。 いいえ。
316 名前:login:Penguin mailto:age [2007/11/16(金) 19:44:27 ID:q8UeZNS0] >>315 /a/b/c/d/hoge1 /a/b/c/d/hoge2 /a/b/c/d/hoge3 じゃなくて /a/b/c/d/hoge1/ /a/b/c/d/hoge2/ /a/b/c/d/hoge3/ の間違いでした。 このリストから hoge1, hoge2, hoge3を抜き出したい。 hoge1/ の最後の "/" も切り落としてしまいたいのですが、どうすれば良いでしょうか?
317 名前:login:Penguin mailto:sage [2007/11/16(金) 19:51:40 ID:PPFIsM3H] >>316 sed なり awk なりで切り出せると思うけど、 最初から find /a/b/c/d -mindepth 1 -maxdepth 1 -type d -printf "%f\n" とかじゃだめなん?
318 名前:login:Penguin mailto:sage [2007/11/16(金) 20:01:17 ID:gAB+KHmJ] >>316 for i in ls -d /a/b/c/d/*/; do basename $i; done
319 名前:login:Penguin mailto:sage [2007/11/16(金) 20:10:36 ID:PPFIsM3H] >>318 for i in `ls -d /a/b/c/d/*/`; do basename $i; done と言いたいんだろうが、 for i in /a/b/c/d/*/; do basename $i; done でいいな。 空白とか入ってなければ。
320 名前:login:Penguin mailto:age [2007/11/16(金) 20:14:17 ID:q8UeZNS0] >>317 レスありがとうございました。 しかしfindコマンドに詳しくない為自分ではよく分かりません。それ・・・。 >>318 レスありがとうございました。 こちらの方法はまさに私が求めていた方法です。非常に分かりやすくて助かります。 本当にありがとうございます。
321 名前:320 mailto:age [2007/11/16(金) 21:33:37 ID:q8UeZNS0] 解決したと思ったのですが、 ROOT=/a # ←ココは何でもいい、とにかくディレクトリ cd ${ROOT} for DIR in `ls -d ./*/` do for TARG in `basename ${DIR}` do echo ${DIR} echo "${TARG}" done done といった感じにしてみたのですが、 Venus7.0 Personal Edition といったディレクトリが Venus7.0 と Personal と Edition の3つに分割されてしまい、そのディレクトリに対して 処理したいのに3つの存在しないディレクトリに対して処理しようとする為、 no such file or directory エラーが次々と帰ってきました。 どうも ディレクトリ名に半角スペースが入っているのがダメなようです。解決策はありませんか? ちなみに全角スペースの場合は1つのディレクトリとして正常に動作しています。 for DIR in `ls -d ./*/` ←この部分で分断されてしまっていると思いますが for DIR in `ls -d ./"*/"` などと" " で囲んで見ましたが */ なんてディレクトリは見つからない と怒られました。 ' ' で囲んでも同じ結果です。どうしたら半角スペースをセパレータとして 認識するのを防げますか?
322 名前:login:Penguin mailto:sage [2007/11/16(金) 21:43:34 ID:lBcVe9Af] なんでそんなディレクトリがあるのか を考えたほうが根本的な解決になりそう
323 名前:login:Penguin mailto:sage [2007/11/16(金) 21:44:56 ID:PPFIsM3H] >>321 だから >>319 で言ったじゃん。 >>322 いや、あるときはあるでしょ。 そんなにおかしいことではない。
324 名前:login:Penguin mailto:sage [2007/11/16(金) 22:02:10 ID:lBcVe9Af] わざわざ_使ってる人の意味を考えよう >>321 は''の囲み方が間違ってるだけだが _があるのが普通って考えたほうが手間なくていい windowsがらみならwindowsでやったほうがいい
325 名前:320 mailto:age [2007/11/16(金) 23:35:30 ID:q8UeZNS0] >>322 ま、まぁ色々事情がありまして。あるんですよ。。。 >>323 >>319 の事かと思ってレスを投稿する前に確認したのですが、 for DIR in ./*/ do for TARG in `basename "${DIR}"` do echo ${DIR} echo ${TARG} done done で確認したところ 変数DIRには正しく取れました。 しかし `basename "${DIR}"` としているにも関わらず 元ディレクトリ名 AVG Anti-Virus Free Edition 7.3 実行結果 AVG Anti-Virus Free Edition 7.3 とこのように分断されてしまいます。 " " で囲っているにも関わらず、です。 何がいけないのでしょうか?
326 名前:login:Penguin mailto:sage [2007/11/16(金) 23:59:15 ID:2bsqELIP] #!/bin/sh LIST="\"space aaa\" \"bbb\" \"space ccc\" \"ddd\""; echo $LIST; # "space aaa" "bbb" "space ccc" "ddd" func(){ echo "arg= $#"; #6 echo "$1"; # space echo "$2"; # aaa echo "$3"; # bbb echo "$4"; # space echo "$5"; # ccc echo "$6"; # ddd } func $LIST; 上のようなスクリプトで func には、"space aaa" みたいにスペースの入った引数を渡したいんですが、 なにか方法はないでしょうか? この場合funcにわたす引数を4つにしたいんです。 展開されて、引数が6つになってる。。。素人ですません。
327 名前:login:Penguin mailto:sage [2007/11/17(土) 00:44:46 ID:X3VLuMy8] >>325 for TARG in `basename "${DIR}"` -> for TARG in AVG Anti-Virus Free Edition 7.3
328 名前:login:Penguin mailto:sage [2007/11/17(土) 07:31:23 ID:FrK+lOPY] >>326 $LIST をクォートする。
329 名前:login:Penguin mailto:sage [2007/11/17(土) 08:31:04 ID:tPTtgwaW] >>328 これだけで良かったんですね。 3時間くらい悩んでたよ。d
330 名前:login:Penguin mailto:sage [2007/11/17(土) 09:32:44 ID:X3VLuMy8] つeval
331 名前:320 mailto:age [2007/11/17(土) 10:54:12 ID:oelt9+66] >>327 レスありがとうございます。 そうなんですよ、そんな風に展開されてしまうんですよ。 ${DIR} だけを出力しても ./AVG Anti-Virus Free Edition 7.3 となるのに "${DIR}" とダブルクォートで囲っても ./AVG Anti-Virus Free Edition 7.3 と全く同じ出力になってしまう。つまりダブルクォートが利いてない・・。 だからそれをどうすれば1つの文字列として扱えるのですか?空白を区切りとしないようにする為には・・・。
332 名前:login:Penguin mailto:sage [2007/11/17(土) 12:01:58 ID:dajSe2oX] >331 basename の結果が正しいんだからダブルクォートは効いてるだろ? その後、`` で置き換えた時には既に "${DIR}" とは無関係の文字列なんだから 直書きされてるのと同様に空白で分割されてるだけ。 あえて書くなら for DIR in ./*/ do BASE=`basename "${DIR}"` for TARG in "${BASE}" do echo ${DIR} echo ${TARG} done done っていうか、なんで 2 段で for を回す必要があるのか。
333 名前:login:Penguin mailto:sage [2007/11/17(土) 12:23:43 ID:dh2GLbwy] >>331 バッククォート内はコマンドの出力に置き換えされるんだから、その出力を クォートすればいい。 for TARG in "`basename "${DIR}"`" っていうか、なんで 2 段で…
334 名前:320 mailto:age [2007/11/17(土) 22:43:03 ID:oelt9+66] >>332-333 な、なるほど・・・・ お二人の解説文を10回ほど読み直しながらじっくり考えてみた所、ようやく理解できました。 特に "`basename "${DIR}"`" はややこしくて 最初は何をかいているのだろうかと思いましたが `basename "{DIR}"` の出力結果そのものを " " で囲っているわけですね。なるほどなるほど。 う〜ん、これは思いつかない・・・。発想力ですか・・・。 で、2段でfor回していますが、確かに冷静に考えると2段で回す必要はありませんね・・・。 むしろ2段で回す処理にしている事で複雑化してしまった感があります。 1段forでいけそうです。
335 名前:login:Penguin mailto:sage [2007/11/23(金) 15:28:58 ID:P7OyMgNI] >326です。 拡張が必要になり、問題が増えました。 #!/bin/sh echo $LIST; # "aaa aaa" "bbb" "ccc ccc ccc" "ddd" func(){ 〜処理〜 } func "eee eee" "fff fff" "$LIST" "ggg ggg"; 以下のようにfuncにスペースを含んだ形で ${LIST}とその他の値を同列に引数として渡したいのです。 ↓funcに渡したい引数 "eee eee" "fff fff" "aaa aaa" "bbb" "ccc ccc ccc" "ddd" "ggg ggg" >>328 >>330 にあったように eval func で展開すると LIST以外の引数がスペースで展開されてしまいます。 LIST以外の引数を "eee\ eee" とか"\"eee eee\""とする手で回避も可能ですが、 修正箇所が増えるので、極力この形は取りたくありません。 なにか方法はありませんか?
336 名前:login:Penguin mailto:sage [2007/11/23(金) 22:55:10 ID:rrMjYG9S] Σ^)/アホーアホー☆ミ-
337 名前:login:Penguin mailto:sage [2007/11/23(金) 23:18:09 ID:OSmgQwJo] uniqはsortしておかないとだめですが、 sortしなくても2回目意向の重複を削除するコマンド内ですか?
338 名前:login:Penguin mailto:sage [2007/11/23(金) 23:25:42 ID:KoVu18yL] some | command | perl -ne 'print unless $seen{$_}++'
339 名前:login:Penguin mailto:sage [2007/11/24(土) 02:54:03 ID:Qc2k01yB] >>335 func をスペースを分割しないで処理するようにして、 func に渡す前に "$LIST" だけ分割しちゃえば良いんじゃないの?
340 名前:login:Penguin mailto:sage [2007/11/24(土) 13:44:38 ID:3ItHeK84] >>338 おおおお、できました。ありがとうございました。
341 名前:login:Penguin mailto:sage [2007/11/24(土) 15:57:48 ID:uBYpiRKV] From - Fri Nov 20 14:53:45 2007 From: "Jfda dsadsada" <fdsfdsa@thdsadaer.de> From - Fri Nov 21 14:53:45 2007 From: "rwerw dfsa" <sfdaf@fdfds.com> From - Fri Nov 23 14:53:45 2007 From: "a bcd" <d@dfds.com> From - Fri Nov 23 14:53:46 2007 From: "abc" <abc@abc.net> このようなテキストの中から、日付に対応したアドレスだけをテキストに出力するにはどうしたらいいのでしょうか? 11月20日が指定されたらfdsfdsa@thdsadaer.deを出力 11月23日が指定されたらd@dfds.comとabc@abc.netを出力といった具合です
342 名前:login:Penguin mailto:sage [2007/11/24(土) 16:23:59 ID:bvlPAES0] grep -A1 "Nov 20" | grep -o "<.*@.*>"
343 名前:login:Penguin mailto:sage [2007/11/24(土) 17:59:39 ID:z00X8bIQ] >>339 それが出来れば良いんですが、 できないのです。方法ありますか? func内で echo $3; した場合。 func "eee eee" "fff fff" "$LIST" "ggg ggg"; echo $3 → "aaa aaa" "bbb" "ccc ccc ccc" "ddd" 当然のように、LIST全体が一つの引数に、、、 以下のようにクォートをなくすと func "eee eee" "fff fff" $LIST "ggg ggg"; echo $3 → "aaa LIST内のスペースで、分解されてしまいます。 $3 に "aaa aaa" を渡したいのに、、、
344 名前:login:Penguin mailto:sage [2007/11/24(土) 22:04:52 ID:DnopHw8N] 無理にシェルで書くより perl かなんか使った方がいいんじゃね。 適材適所。
345 名前:login:Penguin mailto:sage [2007/11/24(土) 22:28:40 ID:bmHXinLt] eval set $LIST func "eee eee" "fff fff" "$@" "ggg ggg"
346 名前:login:Penguin mailto:sage [2007/11/25(日) 17:46:10 ID:ex492j4k] >>345 これだ! こんなトリッキーな手法もあるんですね。 奥が深い。ありがとうございました。
347 名前:login:Penguin mailto:sage [2007/11/25(日) 22:12:54 ID:nNUo7Vyu] >>342 ありがとうございました
348 名前:login:Penguin [2007/11/28(水) 16:44:21 ID:lxwXbk7L] 特定のディレクトリ以下にあるディレクトリ名を検索し そのディレクトリの中にファイルがあった場合のみ変数にディレクトリ名を追加する。 という処理をしたいと考えています。 LIST=`find 特定のディレクトリ -maxdepth 1 -mindepth 1 -type d` 上記のコマンドでディレクトリ一覧は取得できたのですが 取得したディレクトリ一覧の中にファイルがあるかどうかの条件設定方法がわかりません ご教授ください
349 名前:login:Penguin mailto:sage [2007/11/28(水) 16:51:01 ID:hjQ8uHjr] >>348 GNU の find なら ! -empty で。
350 名前:348 mailto:sage [2007/11/28(水) 17:14:26 ID:lxwXbk7L] >>349 レスありがとうございます。 LIST=`find 特定のディレクトリ -maxdepth 1 -mindepth 1 -type d ! -empty` 上記のコマンドで無事に条件を満たすことが出来ました。 感謝です><
351 名前:login:Penguin mailto:sage [2007/11/30(金) 01:52:45 ID:vbHro4B7] 1 A 1 B 1 C 2 P 2 Q 3 X 3 Y 3 Z ... のような入力を 1 A B C 2 P Q 3 X Y Z ... のように整形する簡単な方法はありますか?
352 名前:login:Penguin mailto:sage [2007/11/30(金) 02:21:47 ID:8mp/o88K] awk '{h[$1] = h[$1] " " $2} END { for (key in h) print key h[key] }' < input | sort
353 名前:login:Penguin mailto:sage [2007/11/30(金) 13:45:29 ID:zEAz9Kgp] >>352 惚れた
354 名前:login:Penguin mailto:sage [2007/12/01(土) 01:13:52 ID:285rAG3t] inputをリダイレクトしているのがイヤ。
355 名前:login:Penguin mailto:sage [2007/12/01(土) 01:27:18 ID:aR34EpD+] awkはファイル名を引数に取れるんだな。 パイプでしか使った記憶がなく、素で知らなかった。
356 名前:login:Penguin mailto:sage [2007/12/01(土) 11:59:35 ID:lphCOL1Q] むしろパイプでしか使えないコマンドの名前を パッと挙げろという方がむつかしいだろ
357 名前:login:Penguin mailto:sage [2007/12/01(土) 12:16:31 ID:z08ppphA] オプションの引数という形もない、というものはだいぶ少ないね
358 名前:login:Penguin mailto:sage [2007/12/01(土) 19:59:33 ID:aR34EpD+] とっさに出てきたのは tr
359 名前:login:Penguin mailto:sage [2007/12/01(土) 21:03:16 ID:z08ppphA] MS-DOS 標準添付の SORT (.EXE か .COM か自身がない)
360 名前:login:Penguin mailto:sage [2007/12/01(土) 23:25:16 ID:+jVAJI5Z] MS-DOS 標準添付の MORE
361 名前:login:Penguin [2007/12/03(月) 14:25:58 ID:pB5IpK3Q] 複数のコマンドを実行してログを残したいのですが ( { command1 && command2 } > normal.log ) >& error.log で、標準出力と標準エラーをファイルにリダイレクトまではうまくいきました。 このエラー出力を、画面にも出すにはどんなふうに書くのでしょう? ttp://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8 ちなみに、ここまではこの辺を参考にさせていただきました。 お願いいたします。
362 名前:login:Penguin mailto:sage [2007/12/03(月) 14:26:53 ID:pnpsuBAG] >>361 tee
363 名前:login:Penguin [2007/12/03(月) 15:02:26 ID:pB5IpK3Q] >>362 ありがとうございます できました。 最初に言ってたのとちょっと違うのですが、ようは、すべてログに保存して なおかつERRORの文字が入ってる行だけを画面に出力したかったので 2>&1 | tee file.log | grep ERROR でやりたいことができました。 いろいろ勉強になりました。サンクス。
364 名前:login:Penguin mailto:sage [2007/12/03(月) 16:10:39 ID:+7LXyEUm] コマンドラインとGUIを融合するHotwire opentechpress.jp/developer/article.pl?sid=07/12/03/0133253
365 名前:login:Penguin mailto:sage [2007/12/03(月) 16:33:46 ID:CJjSSdo9] >>364 面白そうだけど、記事の中に具体的な画像が欲しいね・・・・
366 名前:login:Penguin mailto:sage [2007/12/03(月) 16:43:39 ID:pm3xTTNy] >>365 code.google.com/p/hotwire-shell/wiki/Screenshots
367 名前:login:Penguin mailto:sage [2007/12/03(月) 17:31:20 ID:BNt6sl0D] >>366 画像が表示されないのは、送ってくるContent-Typeがおかしいのか。 なんでapplication/octet-streamやねん。
368 名前:login:Penguin [2007/12/04(火) 22:59:48 ID:Bpu7L1AF] ややスレ違いだが、くだ質よりこっちかなと シェルスクリプトの本を買う際に、Linuxユーザーでbashメインで使ってるなら 主旨がbash向けのものを買うべきですか? それともB shell全般向けやsh向けでbashは補完程度の本でも質の高いものを買うべきでしょうか 両シェルの間にそれほど機能、性格の差はなさそうだし
369 名前:login:Penguin mailto:sage [2007/12/04(火) 23:06:21 ID:0gQg9Z1k] bashismって言葉があるくらいで、ついついbashの機能を使ってしまうことは多い。 素のBourne Shellの機能がどこまでなのか書いてある本がいいと思う。
370 名前:login:Penguin mailto:sage [2007/12/04(火) 23:28:47 ID:Bpu7L1AF] >>369 サンクス sh向けでも最近の多くの書籍はbashもカバーしているようですので、その辺りを探してみます
371 名前:login:Penguin mailto:sage [2007/12/05(水) 11:12:29 ID:tDVDuECI] ttp://www.amazon.co.jp/dp/4774122610 そのへん意識するならこれいいかも。 SunOS の bsh と FreeBSD の bsh ( ash ) で違いがある場合についてまで 明記されてる。
372 名前:login:Penguin mailto:sage [2007/12/05(水) 21:59:53 ID:KlliiKVC] >>371 その本と、「UNIXシェルスクリプトコマンドブック 山下 哲典」を最後に候補にしてましたが、後者を買いました。 sh、bash共用でサンプルが多いので。
373 名前:login:Penguin [2007/12/06(木) 18:06:51 ID:ltYfbiEn] いつも複合条件式でまるんですけど #!/bin/bash WAITSEC="" if [ -z "$WAITSEC" -o $WAITSEC -lt 60 ]; then WAITSEC=10 fi を実行すると ./hoge.sh: line 3: [: too many arguments というエラーになります。-oとか-aで記述するifは今まで何回かやったのに 一度もできた記憶が無い!!。結局ifを分けたりして対処してきた負け人生です。 いったい何が悪いというのでしょうか?? 教えていただけますか?
374 名前:login:Penguin mailto:sage [2007/12/06(木) 18:31:24 ID:bgO18Eza] 確かにbashだとなるねぇ。zshだとならんから気づかなかったw #!/bin/bash WAITSEC=$1 if [ -z "$WAITSEC" ] || [ $WAITSEC -lt 60 ]; then WAITSEC=10 fi echo $WAITSEC とりあえずこれで。
375 名前:login:Penguin mailto:sage [2007/12/06(木) 18:35:40 ID:bgO18Eza] と、思ったら出来たw if [ -z "$WAITSEC" -o \( $WAITSEC -lt 60 \) ]; then こういうことだな。 優先順位がおかしいんだ。
376 名前:login:Penguin mailto:sage [2007/12/07(金) 00:20:04 ID:2WlU8Mqa] >>373 -z "$WAITSEC" の成否にかかわらず $WAITSEC -lt 60が実行されちゃってるから問題なんじゃないか? おそらく -z "$WAITSEC"のときは 後ろの条件は 「-lt 60」になるだろうから、>>374 のようにするか${WAITSEC:-0}とかやったらいいんじゃね?
377 名前:login:Penguin mailto:sage [2007/12/07(金) 10:01:03 ID:uKkYmJTB] >WAITSEC="" なので、 >if [ -z "$WAITSEC" -o $WAITSEC -lt 60 ]; then は if [ -z "" -o -lt 60 ]; then と解釈されてエラー。 zsh は sh と違って $WAITSEC は "$WAITSEC" と同じ意味なのでエラーにならない。 "$WAITSEC" -lt 60 と書き換えた場合は、 >-z "$WAITSEC" の成否にかかわらず $WAITSEC -lt 60が実行されちゃってるから問題なんじゃないか? この理由で正しい。
378 名前:login:Penguin mailto:sage [2007/12/11(火) 22:53:04 ID:8t30b6aC] シェルスクリプトにコメントを書くには # comment っていう感じに # を行頭につけてコメントにしますが、自作のシェルスクリプト等に 日本語でコメントを埋め込むのは良くない事なのでしょうか? 英語でコメントを埋め込むべきなのでしょうか? 理由>環境によっては文字化けするかもしれないから その場合、英語では上手くコメントがかけないのですが、、、皆さんはこの辺どうしていますか?
379 名前:login:Penguin mailto:sage [2007/12/11(火) 23:22:06 ID:8VUAk6YG] >>378 英語では上手くコメントがかけない、って、自分が書いた自分用のスクリプトだったら、 べつに、自分にさえ分かればいいんじゃないの?極端な話、ローマ字で書いた日本語でもいいんじゃないかと。
380 名前:login:Penguin mailto:sage [2007/12/11(火) 23:27:45 ID:LcSZkVoI] Shift_JISで書いて2バイト目に ¥ が含まれるとコメントが継続しちまうかな、 と思ったんだが、そうでもないみたいだな。
381 名前:login:Penguin mailto:sage [2007/12/12(水) 08:33:10 ID:itajSrlG] >>379 いやー、他の人にもスクリプトの内容が分かるようにコメント書かないといけない場合はどうすれば? 今はローマ字で書いたりしていますが、さすがに見にくいというか・・・ かといって英語では上手くかけないし・・ C言語やJava等では // 日本語コメント が使えるし MS-DOSの.batファイルでも REM 日本語コメント が使える、Windows Script Hosting(WSH)であっても '日本語コメント が使えて、大抵のスクリプト言語は日本語のコメントが使えるのになぜにLinuxのシェルスクリプト だけこんな事で悩まないといけないんだろうと・・・。 まぁOSが違うから文字コード周りのトラブルなんだろうけど・・。
382 名前:login:Penguin mailto:sage [2007/12/12(水) 09:12:34 ID:fnWAKO+5] 使えるか使えないかっていうなら使えるだろ。 確実に自分しか使わないならShift_JISのようなbrain damagedな文字コードじゃなきゃ 別に何でもいいんじゃない。 しかし使ってよいか使わざるべきかというと、一般にスクリプトって どのロケールで実行されるかわからないよとかの問題が出てくる。 あなたが出した例ではCやJavaのソースファイルはコンパイルするときの 環境が限定できれば問題ないし、DOSのバッチファイルも日本語DOSしか 考えていない。
383 名前:login:Penguin mailto:sage [2007/12/12(水) 11:25:06 ID:ytRjAEEx] >Shift_JISで書いて2バイト目に ▼ が含まれるとコメントが継続しちまうかな、 sjis だろうが何だろうがコメントの継続なんてありません。 >しかし使ってよいか使わざるべきかというと、一般にスクリプトって >どのロケールで実行されるかわからないよとかの問題が出てくる。 コメントにロケールなんて関係ありません。
384 名前:login:Penguin mailto:sage [2007/12/12(水) 11:32:57 ID:11rQvfIz] 英語くらい書けよ。
385 名前:login:Penguin mailto:sage [2007/12/12(水) 12:33:25 ID:5zz/Y7Bm] っつか、どういう環境(=人間環境)だか知らないけど、 そんな雰囲気だと、頑張って英語でコメントを書いても、 肝心の「他の人」が、それを理解出来ない、 ということが容易に想像出来てしまうわけで、 だったらローマ字でいいじゃん、と思う。
386 名前:login:Penguin mailto:sage [2007/12/15(土) 11:57:10 ID:FOfJjZuV] >>383 コメントってのは実行されるときはロケール関係ないけど 元々読むものだから、ロケールばらばらと読みにくくて困るよね って意味だよ。たぶんね。
387 名前:login:Penguin mailto:sage [2007/12/19(水) 22:19:06 ID:qeHYVBDH] #!/bin/bash for i in *.txt で、'*.txt' で展開されるリストの長さに制限はある? ls: argument list too long になる長さでも処理できるようだが、他に何か別の制限はある?
388 名前:login:Penguin [2007/12/20(木) 18:50:14 ID:Qtkk7tpx] sedについての質問です aaa bbb ccc という出力を、sedコマンドで一行にしたいのです。 aaa bbb ccc このように。 どうしたらよいですか。 逆の、sed -e 's/\ /\n/g' はできるのですが。
389 名前:login:Penguin mailto:sage [2007/12/20(木) 21:20:24 ID:1r8qT2Sh] awkなら $ (出力するコマンド) | awk '{printf("%s ", $0)}' でできるんだけどなぁ
390 名前:login:Penguin mailto:sage [2007/12/20(木) 21:47:48 ID:p9kMPhFx] $ cat input aaa bbb ccc $ sed -n 'H;${g;s/¥n/ /g;s/^ //p;}' input なんか無様だ。きっともっとスマートに出来るに違いない。
391 名前:login:Penguin mailto:sage [2007/12/20(木) 21:49:27 ID:p9kMPhFx] もし各行が空白文字を含まないなら、 echo `cat 元テキスト` > 新テキスト でいいな。
392 名前:login:Penguin mailto:sage [2007/12/20(木) 22:14:22 ID:IRXLh3Ok] >>388 sed ':loop; N; s/\n/\ /g ;$!b loop' hoge
393 名前:login:Penguin mailto:sage [2007/12/20(木) 22:19:20 ID:UDgG5/dT] sedにこだわらなければ tr -s '\n' ' ' < input とか
394 名前:login:Penguin mailto:sage [2007/12/20(木) 22:28:20 ID:p9kMPhFx] 目的によっては、 $ fmt input fmtってUNIX標準?
395 名前:login:Penguin mailto:sage [2007/12/20(木) 22:39:06 ID:Qtkk7tpx] >>389-393 こんなにレスが来るとは。 皆さんありがとうございます。 すべて試してすべてで出来ました。 echoとtrはなるほどという感じです。 他は知りませんでした。レベル1アップですね。
396 名前:login:Penguin mailto:sage [2007/12/20(木) 22:43:02 ID:Qtkk7tpx] >>394 更新遅れた。 できました。オプションすらいらないとは。
397 名前:login:Penguin mailto:sage [2008/01/06(日) 19:04:19 ID:tfZRITK8] awkで awk '{print $2,$3}' とすると2,3番目が表示されますが 二番目以降全て表示するにはどうすればいいのでしょうか?
398 名前:login:Penguin mailto:sage [2008/01/06(日) 19:44:21 ID:TN85yzo6] awk 'gsub($1,"")'
399 名前:login:Penguin mailto:sage [2008/01/06(日) 21:41:07 ID:HrtO6pOF] $1に特殊文字が入れられると思わぬ結果になりそうな気がする。
400 名前:login:Penguin mailto:sage [2008/01/06(日) 21:53:19 ID:xjxCtnUs] awk '{for (i=2;i<=NF;i++){printf($i" ")}}'
401 名前:login:Penguin mailto:sage [2008/01/06(日) 22:56:50 ID:HrtO6pOF] フィールド区切が複数のスペースやタブコードでも、1個のスペースに置換されてしまう気がする。 >>397 の「全て」がそこまで求めているかは分からないが。
402 名前:login:Penguin mailto:sage [2008/01/07(月) 00:59:34 ID:Lq+3ioDo] >>401 awk -Fなにか '{for (i=2;i<NF;i++){printf("%s%s", $i, FS)};print $NF}'
403 名前:397 mailto:sage [2008/01/07(月) 02:29:17 ID:SZZlXYY6] ありがとうございます。 最初 >>387 さんと同じことを思ったのですが他に オプションか何かで用意されていると思ってました。 402さんのを使わせていただきます
404 名前:397 mailto:sage [2008/01/07(月) 02:29:58 ID:SZZlXYY6] s/387/398
405 名前:login:Penguin mailto:sage [2008/01/07(月) 17:21:59 ID:CzyB4/IB] >>402 これだと複数の空白が一つになって表示される
406 名前:login:Penguin mailto:sage [2008/01/07(月) 18:30:26 ID:DBTZ8VT2] awk '{gsub($1, "");print substr($0,2)}'
407 名前:login:Penguin mailto:sage [2008/01/07(月) 18:59:30 ID:AGg2gknU] hint: aho,choaho,kusoaho,doaho ∴ awk '{print substr($0,length($1)+2)}'
408 名前:login:Penguin mailto:sage [2008/01/07(月) 20:07:07 ID:81ckgAQ5] 個人的には>>398 をアレンジして、 gawk 'gsub(/^[[:blank:]]*[^[:blank:]]+/,"")' かな。
409 名前:login:Penguin mailto:sage [2008/01/07(月) 20:13:04 ID:DBTZ8VT2] なんだ>>398 で既出だったのね。見落としスマソ。
410 名前:login:Penguin mailto:sage [2008/01/07(月) 23:07:24 ID:6d+dex8H] [file1] bar=234 [file2] foo=123 Bar=987 と2つのkey=valueな内容が入ってるファイルがある。ここで、file1には ないがfile2にはあるkeyのみ(case-insensitiveな比較で、また、valueは 違っていてよい)を拾いkey=valueを出力したいのだけど、一行で書けないかな? どういう出力になってほしいかというと $ myuniq --split-char='=' --field-index=1 --print-unique file1 file2 foo=123 というような実行イメージ。awkで awk -F= '{ line[toupper($1)]=$0; seen[toupper($1)]++; } END { for (key in line) if (seen[key] == 1) print line[key]; }' file1 file2 みたいなのはでっち上げたんだけど、正直汚い。
411 名前:login:Penguin mailto:sage [2008/01/07(月) 23:30:18 ID:6RYIn4eu] 回答じゃなくてすまんのだが、最後にあるワンライナーだと、 2ファイル通して1回しか現れなかったものを表示するから、 「file1にはないがfile2にある」ものだけでなく 「file2にはないがfile1にある」も出てこないか?
412 名前:login:Penguin mailto:sage [2008/01/07(月) 23:35:18 ID:6RYIn4eu] 負けず劣らずかっこ悪いシロモノ for w in `cut -d= -f1 file1 file2 |tr A-Z a-z|sort|uniq -c|sed -n 's/ 1 *//p'`; do grep "^$w=" file2; done
413 名前:login:Penguin mailto:sage [2008/01/07(月) 23:52:40 ID:DBTZ8VT2] grep -v -i "`cut -d= -f1 file1`" file2 重複は無考慮
414 名前:login:Penguin mailto:sage [2008/01/07(月) 23:54:29 ID:6d+dex8H] >>411 あ、すみません。バグです。が、元の仕様が厳しすぎで、 どちらかにしかないエントリを出す でも大丈夫でした。 file1かfile2のどちらかにのみあるkeyに対応するkey=valueを出力する に仕様を訂正させてください。 何をしたいのかというと、Windowsの環境変数を手元のUNIXな環境に 取り込みたいのですが、その際に自分で定義している分については 上書きされないようにしたいのです。 hostA$ env > hostA.env hostB$ env > hostB.env hostB$ myuniq ... hostA.env hostB.env > diff.env hostB$ . ./diff.env みたいなことをしたいと。で、片方の環境が Windows なもので、 case insensitiveな比較とかも必要になってます。 行全体ではなく特定のフィールドのみ見て uniq/diff 処理して出力って 簡単そうで微妙に面倒です。
415 名前:login:Penguin mailto:sage [2008/01/07(月) 23:59:58 ID:6d+dex8H] >>413 おおー。grepのexprに改行入れるとそんな動作になるとは! エレガントです。勉強になりました mOm
416 名前:login:Penguin [2008/01/08(火) 18:35:59 ID:0P1F18Bp] 1行で2つのコマンドを実行するときに 2つ目に実行したコマンドに、1つ目に実行したコマンドの引数を そのまま渡したい場合の記述方法がわからず、困っています。 $ vi hogehoge; echo ?? *??が不明箇所* 上記の例の場合は2つ目に実行しているecho文の出力結果でhogehogeを表示させたいのですが。。 対処方法はないでしょうか? よろしくお願いいたします。
417 名前:login:Penguin mailto:sage [2008/01/08(火) 18:38:30 ID:k6k1za9N] >>416 i="hogehoge"; vi $i; echo $i じゃだめなん?
418 名前:416 mailto:sage [2008/01/08(火) 19:34:39 ID:0P1F18Bp] >>417 ありがとうございます。 その方法があったことに気づきませんでした。 おかげで解決しました、感謝です><
419 名前:login:Penguin mailto:sage [2008/01/08(火) 23:12:30 ID:OqUgF6yk] vi hogehoge; echo !$
420 名前:login:Penguin mailto:sage [2008/01/08(火) 23:26:00 ID:5sg6/WvN] >>419 それタイプしたタイミングではまだ!$は前行のコマンドの。
421 名前:login:Penguin mailto:sage [2008/01/08(火) 23:33:15 ID:A2IkwjEN] 引数が一つだけなら vi hogehoge; echo $_ でもいけるな。
422 名前:login:Penguin [2008/01/10(木) 13:02:51 ID:9dVYtTPe] cshからJavaを呼び出すシェルを作成しています。 その呼び出したJava内部で例外が発生した場合、 以降のシェルの処理を続行させたくありません。 どの様にすればよいのですか? Javaのcatch節でSystem.exit(1);とかで処理を終了させて、 cshでそれを検知する方法があるのかなぁ? と漠然には思うのですが・・・
423 名前:login:Penguin mailto:sage [2008/01/10(木) 19:51:46 ID:qThypT9T] >>422 System.exitが何をするのか分かっているなら、 Javaコマンドの終了値を普通にifなりswitchなりで受けて、csh側からもexitすれば良いだけでは? 単純に例外=即終了と決め打ちなら良いけど、例外によって複数の処理をさせたくなると、 System.exitの終了値を多数用意して管理しなければならなくなって面倒だけどね ここからはポリシーの問題になるけど、System.exit等を使ってコマンドの終了値を利用するよりは、 どんな例外で終了したのかを前もって文字列等でstderrにでも吐き出したり、 終了した例外を表すような長さゼロのテンポラリファイルでも作ってから、Javaコマンドの方を終了させておいて、 csh側からは、むしろその文字列やファイル名を評価させてexitさせるようにした方が、後からデバッグする時とかは楽だよ 更に言えばシェルプログラミングにcshを使うのは止めるべき www.klab.ee.utsunomiya-u.ac.jp/~hiroki/csh-whynot.euc www.klab.ee.utsunomiya-u.ac.jp/~hiroki/sh-perl-tips/
424 名前:login:Penguin mailto:sage [2008/01/10(木) 21:50:31 ID:CJRDs9Ag] Javaのポリシーは知らないが、エラーメッセージと終了コードは二者択一せにゃならんものではない気がする。
425 名前:login:Penguin [2008/01/11(金) 14:14:06 ID:mrGJLB/g] >>423 、424 ありがとうございます。 シェルスクリプト自体、経験が浅い上に今回の要望がcshというのが 決まっているもので・・・ 困っています。。。 2chでの質問自体も初めてなもので・・・ 準正常として扱うような例外は全てJava側で処理をしてプログラムは 正常終了として扱っています。 処理続行不可能と判断した、ランタイム系やIO例外などが発生した場合は 後続のシェルを流したくない。 という状況です。 if $JAVA_CMD then 続き else exit 1 fi 以下処理続く ・・・ ってな感じにしたのですが、どうも上手くJavaでexitした値が取れないです。 文法が間違っているのですかね? もう少し調査してみますが、上記の書き方で間違いがあればご指摘頂きたいです。 後は教えていただいた、テンポラリファイルでの判断も考えてみます。
426 名前:login:Penguin mailto:sage [2008/01/11(金) 15:11:54 ID:GLHvzQDj] findコマンドの結果をツリービュー(treeコマンドの結果的なツリー表示)で出すコマンドまたは方法ってありますか?
427 名前:login:Penguin mailto:sage [2008/01/11(金) 16:08:44 ID:6CIbL1kG] >>425 cshなら $JAVA_CMD if ($? != 0) then echo "failed" exit $? endif echo "OK" でどう?
428 名前:login:Penguin [2008/01/11(金) 16:55:30 ID:mrGJLB/g] >>427 ありがとうございます。 教えていただいた方法で、想定通りの動作になりました。
429 名前:login:Penguin mailto:sage [2008/01/11(金) 21:11:49 ID:OPXAXUzh] >>426 普通にtreeコマンド使うんじゃだめなん?? findで絞った結果を出したいのかなぁ。
430 名前:login:Penguin mailto:sage [2008/01/11(金) 22:17:07 ID:4hqMEkJ5] grep -f find結果 tree結果 とか。 # 本気にしないように。
431 名前:login:Penguin mailto:sage [2008/01/11(金) 23:02:21 ID:aloediIm] 基本的にはtree | grep なんちゃら でいいんじゃね?
432 名前:login:Penguin mailto:sage [2008/01/14(月) 11:50:49 ID:3iR1bkH0] 画像の特定の領域だけを一括でぼかしたいのですが いい方法はありませんか?
433 名前:login:Penguin mailto:sage [2008/01/14(月) 12:00:15 ID:ZjONjaHo] つ netpbm
434 名前:login:Penguin mailto:sage [2008/01/14(月) 12:12:55 ID:6n5zEajJ] つimagemagick
435 名前:login:Penguin mailto:sage [2008/01/14(月) 14:01:26 ID:Or9vH7Fn] メールアドレスの@以降の最後の国を表すCountry Codeの部分だけを抜き出すには どのような正規表現を使えば良いでしょうか? @hotmail.co.jp の.jp の部分を見る感じです。 .jp以外は無視する、という感じです。これで日本のメールしか相手にしない事になりますよね。
436 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:07 ID:ZjONjaHo] spam避け? 日本からも.comや.netや.orgや.infoや.bizや.acや.tvや.toや(以下略)の アドレスでメールが送られることはあるぞ。
437 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:25 ID:Or9vH7Fn] $.jp ↑これでいいんでしょうか?正規表現全く知らない状態でネットでちょっと検索してみたのですが・・・
438 名前:login:Penguin mailto:sage [2008/01/14(月) 14:05:05 ID:Or9vH7Fn] あっちゃー、そうなんですか・・・ 海外のメールを相手にしない方法って無いんですかね・・・ 英語でViagraとかうるさいんですよ。
439 名前:login:Penguin mailto:sage [2008/01/14(月) 14:17:08 ID:6n5zEajJ] /[あ-ん]/? ひらがながないメールは無視してもよかろう。
440 名前:login:Penguin mailto:sage [2008/01/14(月) 14:37:34 ID:FCIPzPAY] ヘッダの Content-Type を見て弾くとかどうよ? ^Content-Type: .*iso-2022-jp
441 名前:login:Penguin mailto:sage [2008/01/14(月) 14:42:36 ID:6n5zEajJ] 最近はutf-8なのも多いよ。
442 名前:login:Penguin mailto:sage [2008/01/14(月) 14:54:07 ID:JtG94m55] utf-8 は違法で、危険運転致死罪が適用になるんじゃ?
443 名前:login:Penguin mailto:sage [2008/01/14(月) 22:54:28 ID:RfE0b+o0] >>437 \.jp$ では?
444 名前:login:Penguin mailto:sage [2008/01/16(水) 13:17:12 ID:ZRO/FTzi] テキストファイルを、最後の3行を除いて出力したいのですが 何か良い書き方はないでしょうか。 sed '$d' xxxx | sed '$d' | sed '$d' と書くくらいしか思い付かなくて。
445 名前:login:Penguin mailto:sage [2008/01/16(水) 14:26:14 ID:1obpvu1A] >>444 head -n -3 foobar.txt
446 名前:login:Penguin mailto:sage [2008/01/16(水) 17:01:38 ID:IKqjky5V] awk '{a[NR]=$0}END{for(j=1;j<=NR-3;j++) print a[j]}' a.txt
447 名前:login:Penguin mailto:sage [2008/01/16(水) 18:25:12 ID:ZRO/FTzi] >>445 head のオプションは見落としてました…ありがとうございます
448 名前:login:Penguin [2008/01/16(水) 21:56:01 ID:KAlEWwYc] ランダムな数字が欲しいとき,どうするのが簡単? 1. $$ 2. $RANDOM 3. /dev/urandom 4. 時計 あたりを思いついたんだけど
449 名前:login:Penguin mailto:sage [2008/01/16(水) 22:14:57 ID:yh54UVVr] ワシは、ランダムな数字の用途により生成手段を変えてるような気がする。
450 名前:login:Penguin mailto:sage [2008/01/16(水) 22:16:21 ID:KAlEWwYc] 1. 偏りそう 2. bash依存 3.4. 面倒 という問題点があるから,誰かいい方法教えてくれないか?
451 名前:login:Penguin mailto:sage [2008/01/16(水) 22:19:14 ID:KAlEWwYc] >449 たしかに用途によって求められる強さが違う気がする. とりあえずこうしとけ的な汎用的な方法はないんかな. いちばん手軽な方法が知りたい
452 名前:login:Penguin mailto:sage [2008/01/16(水) 22:47:32 ID:HQvmxN1E] >>448 $$はスクリプト内で複数個必要だと使えない罠 dateのmanを見ていたら、 %N nanoseconds (000000000..999999999) というのがあった。こんな感じ % echo -n `date +%N` 431218994 % echo -n `date +%N` 857494685 % echo -n `date +%N` 269031777 % echo -n `date +%N` 803351248 % echo -n `date +%N` 195538275 % echo -n `date +%N` 538357509 % echo -n `date +%N` 058776188 %
453 名前:login:Penguin mailto:sage [2008/01/16(水) 23:09:59 ID:PJonPFmQ] jotはたぶんBSD系限定だよな。 jot -r 10 1 6 /dev/urandomは10進数テキストで得るのがめんどーだろうか。 dd if=/dev/urandom bs=2 count=1 2>/dev/null | od -vd 左カラムがじゃまだな。 sed 1q |cut -f2 -d' ' とかで削るか。
454 名前:login:Penguin mailto:sage [2008/01/16(水) 23:21:36 ID:KAlEWwYc] >452,453 なるほど.date +%Nはいい感じ. jot便利そうだよ,jot.犬にもこんなの欲しいな. ありがとう
455 名前:login:Penguin mailto:sage [2008/01/16(水) 23:24:18 ID:HQvmxN1E] od -t u1 /dev/urandom | awk '{print $2;exit}'
456 名前:login:Penguin mailto:sage [2008/01/16(水) 23:33:28 ID:PJonPFmQ] r=`fortune | md5sum - | sed 's/^¥(........¥).*/¥1/'` r=`printf %d 0x$r` ごめんなさいごめんなさい。
457 名前:login:Penguin mailto:sage [2008/01/16(水) 23:51:47 ID:puzD1M+G] 普通に perl -e 'print int(rand(1000))' じゃダメなの?(perl5前提だけど)
458 名前:login:Penguin mailto:sage [2008/01/16(水) 23:55:16 ID:KAlEWwYc] >457 これだけのためにperlやawkを出してきたくないという貧乏心があってwww
459 名前:login:Penguin mailto:sage [2008/01/17(木) 01:30:17 ID:xe77Y4ah] 時は金なり、というじゃない
460 名前:login:Penguin mailto:sage [2008/01/17(木) 01:45:37 ID:hGbWYs9C] つーか、乱数ってこれだけのため、っていうほど簡単なものじゃないと思う。 そういうものが必要な処理はシェルじゃなく、ちゃんとそれなりの言語でプログラムしたほうがいいかも。
461 名前:login:Penguin mailto:sage [2008/01/17(木) 09:08:26 ID:MJ2pzO6M] 確かに簡単な乱数ならともかく、ちゃんとした乱数が欲しい処理は言語引っ張り出したほうが良いかもね
462 名前:login:Penguin mailto:sage [2008/01/17(木) 09:18:44 ID:wcByJn9i] % i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \ | awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n 0 9.70% 1 10.70% 2 8.60% 3 11.00% 4 10.40% 5 8.90% 6 11.40% 7 9.70% 8 9.80% 9 9.80% (´・ω・`) % i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \ | awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n 0 9.20% 1 12.30% 2 8.60% 3 11.00% 4 11.20% 5 9.30% 6 11.40% 7 7.80% 8 11.40% 9 7.80% (゚д゚)
463 名前:login:Penguin mailto:sage [2008/01/17(木) 09:28:02 ID:wcByJn9i] % od -t u1 /dev/urandom \ | awk '{hist[int($2/256.0*10)]++} NR==1000{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n 0 9.80% 1 9.50% 2 10.10% 3 9.80% 4 9.80% 5 9.40% 6 10.20% 7 10.20% 8 10.30% 9 10.90% (´・ω・`) % perl -e '$MAX=10;$LOOP=1000000; for (1...$LOOP) {$hist[int(rand()*$MAX)]++}; for (0..$MAX-1) {printf("%2d %4.2f%\n", $_, $hist[$_]/$LOOP*100) }' 0 9.98% 1 9.99% 2 9.99% 3 10.02% 4 10.03% 5 10.02% 6 9.92% 7 10.00% 8 10.00% 9 10.04% (゚∀゚) date +%Nは、ばらつきはともかく遅いな...
464 名前:login:Penguin mailto:sage [2008/01/17(木) 10:59:36 ID:bFGNQCBf] 遅いのは date +%N じゃなくて while のループだと思うよ。
465 名前:login:Penguin mailto:sage [2008/01/17(木) 11:37:17 ID:LfhUWWyD] >>450 > 2. bash依存 ksh88由来らしい tp://www.cs.princeton.edu/~jlk/kornshell/doc/man88.html ksh互換を期待できるなら使ってもいいんじゃね
466 名前:login:Penguin mailto:sage [2008/01/18(金) 01:58:10 ID:S6Zw/ddB] /usr/games/random -e 100; echo $? は?
467 名前:login:Penguin mailto:sage [2008/01/18(金) 07:42:17 ID:YTGcRcKS] >>466 /usr/gamesってそれ何年前のWSのディレクトリ構成だよ...
468 名前:login:Penguin mailto:sage [2008/01/18(金) 17:40:50 ID:wVas3OI3] findの検索結果でディレクトリの場合は最後に「/」をつけさせたいのですが、いい方法はあるでしょうか?
469 名前:login:Penguin mailto:sage [2008/01/18(金) 17:50:43 ID:YTGcRcKS] find . -exec ls -Fd {} \;
470 名前:login:Penguin mailto:sage [2008/01/18(金) 22:33:39 ID:EJvy1m4k] >>468 find (検索ディレクトリ) -type d -printf "%p/\n" -or -print
471 名前:login:Penguin mailto:sage [2008/01/18(金) 22:55:09 ID:S6Zw/ddB] >>467 最新のLinuxの(いやほんと。これだけは伝統的理由で残ってるのかな)
472 名前:login:Penguin mailto:sage [2008/01/18(金) 23:22:22 ID:6BHP4h96] >471 鳥は?
473 名前:login:Penguin mailto:sage [2008/01/19(土) 01:14:55 ID:ZLNpfSkQ] >>472 Debian (sid)。まあ bsdgames とかまんまレガシーなパッケージだけだけどね。
474 名前:login:Penguin mailto:sage [2008/01/19(土) 05:58:20 ID:JWtUz7T2] Debian etch にも/usr/games はあるな。 中みたらbannerとfortuneが入ってた。
475 名前:login:Penguin mailto:sage [2008/01/19(土) 08:07:34 ID:njld/y5g] シェルスクリプトの本で実用例の多い本ってありませんか?
476 名前:login:Penguin [2008/01/19(土) 17:07:33 ID:NuJUp+KH] Fedora4を使っています /start.txt内の記載が 12 254 3678 4 59 621 78 896 、、、、、、 と法則性の無い桁数の数字が2000行近くあるものを /end.txtに 12,254,3678,4 59,621,78,896 、、、、 A,B,C,Dと4項目で1行に変換したいと思っています start.txtから4行抜き出して end.txtに1行にする考え方でいい方法を教えていただけないでしょうか よろしくお願いいたします
477 名前:login:Penguin mailto:sage [2008/01/19(土) 18:46:40 ID:ZLMZWyE0] cat /tmp/test.txt | awk 'NR%4{printf("%s,",$0)} !(NR%4) {print $0} ' 余りが出たら最後カンマ付きで出力されちゃうけど
478 名前:login:Penguin [2008/01/19(土) 18:55:41 ID:NuJUp+KH] >>477 完璧な物ありがとうございます 今迄sedばかり使っていたのですがawkすごいですね awkの勉強させていただきます
479 名前:login:Penguin mailto:sage [2008/01/19(土) 18:59:10 ID:IrN8xoLt] >>477 あらupしようとしたら同じだったわ。 awk '{printf"%s%s",$0,(NR%4?",":"\n")}' < start.txt
480 名前:login:Penguin mailto:sage [2008/01/19(土) 19:02:55 ID:NuJUp+KH] >>479 ありがとうございました とても参考になります
481 名前:login:Penguin mailto:sage [2008/01/19(土) 19:43:02 ID:rxOILVvf] vi start.txt q94J↓q10000@9 :%s/ /,/g :w end.txt
482 名前:login:Penguin mailto:sage [2008/01/19(土) 19:59:13 ID:58USgOmq] >>473-474 Debianではゲームの実行バイナリは/usr/gamesに置かれるぜ。 最近はポリシーチェッカも警告を出すようになったから、lennyまでには移動完了するんじゃね。 lintian.debian.org/reports/Tpackage-section-games-but-contains-no-game.html lintian.debian.org/reports/Tpackage-section-games-but-has-usr-bin.html
483 名前:login:Penguin mailto:sage [2008/01/19(土) 21:00:37 ID:ZLNpfSkQ] >>482 なんでだろうね? FHS誤解してたかと読み直したらそんなことないし。理由がわからん。
484 名前:login:Penguin mailto:sage [2008/01/19(土) 21:04:24 ID:ZLNpfSkQ] ごめん上は嘘。Debian Policy には As described in the FHS, binaries of games should be installed in the directory /usr/games. This also applies to games that use the X Window System. Manual pages for games (X and non-X games) should be installed in /usr/share/man/man6. とか書いてあった。FHSをgrepしたら、正式なセクションはないが、optionalとしてgames作っていいと 書いてあった。
485 名前:login:Penguin mailto:sage [2008/01/19(土) 21:14:55 ID:Xt/fDApd] FHSとかグローバリゼーションとか国際化とか そういうのが全て悪の元凶。
486 名前:login:Penguin mailto:sage [2008/01/19(土) 22:06:40 ID:ZLNpfSkQ] FHSは/usr/localと/etcを綺麗にしてくれる。 それだけでも推進されてしかるべき。
487 名前:login:Penguin mailto:sage [2008/01/20(日) 02:02:52 ID:dexE1e0m] /usr/gamesはオプションなのに、/usr/local/gamesは必須扱いなところを見れば分かるとおり ディトリビュータはゲームなんか提供すんな、ということなのだよ。 つまりゲームを提供しているDebianは人々を堕落させる悪のディストリビュータなのだ!
488 名前:login:Penguin mailto:sage [2008/01/20(日) 02:23:04 ID:kH+ebKTA] >>487 なにその陰謀史観(w 単に /usr/ 直下はディストリの管轄だし自分で決めろ、 一方で /usr/local/* は空フォルダ切っておく以上は認められないから 代わりとして、せめて誘導できるように切っておけ、ということかと。 FHSで自分的に従来慣習と比較して見慣れないのは/srvだな。 どこのUNIXでの慣習だったんだろう?
489 名前:login:Penguin mailto:sage [2008/01/20(日) 02:55:38 ID:M1QHfiRt] つっこみどころは /usr/games/bin/fortune じゃなくて /usr/games/fortune ってとこじゃなかったのかー
490 名前:login:Penguin mailto:sage [2008/01/20(日) 04:01:16 ID:FZKKsnAp] >>476 sed ':b;1~4,+2{N;s/\n/,/;bb}' sedも心の片隅にでも置いておいてやってくだされ。
491 名前:login:Penguin mailto:sage [2008/01/20(日) 04:20:45 ID:IwRos1VB] >>489 管理者のPATHからゲーム関係を除外するのが目的だろうから /usr/games/binとサブディレクトリを掘る必要はないんじゃね。
492 名前:login:Penguin mailto:sage [2008/01/21(月) 02:31:10 ID:HJiECvMS] >>490 そんな記法初めて見た… どうなってんの???
493 名前:login:Penguin mailto:sage [2008/01/21(月) 02:55:10 ID:QTxOOwHl] アドレス指定がGNU拡張?
494 名前:login:Penguin mailto:sage [2008/01/21(月) 11:41:48 ID:JvqHER/W] >>476 paste -d, - - - - paste も心の片(ry
495 名前:login:Penguin mailto:sage [2008/01/21(月) 14:42:32 ID:svPtjQeo] 次のようなファイルがあるとします。 $ cat name.txt name1 name2 name3 name4 name5 $ cat weight.txt weight1 weight2 weight3 weight4 weight5 このとき、なんとかして $ ??????????? name1 weight1 name2 weight2 name3 weight3 name4 weight4 name5 weight5 と表示したいのですができません。 最初は $ cat name.txt weight.txt > data.txt $ awk '{ if(NR<=5) a[NR]=$0; else b[NR-5]=$0} end{for(i=1;i<=100;i++) printf i,a[i],b[i];}' data.txt としましたが、空白が表示されるだけでした。
496 名前:login:Penguin mailto:sage [2008/01/21(月) 14:51:31 ID:N+zVQlnl] >>495 paste
497 名前:login:Penguin mailto:sage [2008/01/21(月) 14:53:35 ID:svPtjQeo] >>496 ありがとうございました。 ぐぐるまでもヘルプ読むまでもなく、 適当にいじっただけでそうなりました。
498 名前:login:Penguin mailto:sage [2008/01/22(火) 11:11:17 ID:DOTIpHDE] gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt height.txt ファイル数に制限はない。あと出力される行数は、最後のファイルの行数によって決まってしまうがな。
499 名前:login:Penguin mailto:sage [2008/01/25(金) 13:18:49 ID:u9KTnE0i] ランダムに壁紙を表示するスクリプト作ってみました 一応予想通りに動いてるようですが問題点や改善点があったら叩いてくだしあ #!/bin/sh EXT='.jpeg$|.jpg$|.png$' LIST=`ls $1 | grep -Ei $EXT` if [ "$LIST" = '' ] ; then\ echo "No files found in $1." exit fi NUM=`echo $LIST | wc -w` N=`expr $RANDOM % $NUM + 1` TARGET=`echo $LIST | cut -d ' ' -f $N` #echo "$1/$TARGET" bsetbg $1/$TARGET
500 名前:login:Penguin mailto:sage [2008/01/25(金) 15:41:59 ID:5ugSsaO2] >>499 そのままだと画像ファイル名やパスに空白があると動かないけど、いいのか?
501 名前:login:Penguin mailto:sage [2008/01/25(金) 17:04:10 ID:HizVC3Pf] #!/usr/bin/python import sys, os, random def is_image(filename): EXT = ('jpeg', 'jpg', 'png') return any(filename.endswith(ext) for ext in EXT) if sys.argv[1:]: dir = sys.argv[1] else: dir = os.path.curdir files = filter(is_image, os.listdir(dir)) if not files: print "No images found in %s" % dir sys.exit(1) target = random.choice(files) os.system("echo bsetbg '%s'" % os.path.join(dir, target)) # 高級言語って素晴らしいね
502 名前:login:Penguin mailto:sage [2008/01/25(金) 17:51:17 ID:u9KTnE0i] >501 ちょwwスレタイwww 修正してみました #!/bin/sh EXT='.jpeg$|.jpg$|.png$' if [ "$1" = '' ] ; then\ DIR=`pwd` else\ DIR="$1" fi LIST=`ls "$DIR" | grep -Ei "$EXT"` if [ "$LIST" = '' ] ; then\ echo "No files found in $DIR." exit fi NUM=`echo "$LIST" | wc -w` N=`expr "$RANDOM % $NUM + 1"` TARGET=`echo "$LIST" | cut -d ' ' -f "$N"` #echo "$DIR/$TARGET" bsetbg "$DIR/$TARGET"
503 名前:login:Penguin mailto:sage [2008/01/25(金) 18:55:56 ID:u9KTnE0i] >502 事故レス expr はクオートしちゃまずかった
504 名前:login:Penguin mailto:sage [2008/01/26(土) 00:32:05 ID:0LMYrtfF] 個人的には NUM= 以降を配列でやらせることが多いので、わりと bash を使う。 #!/bin/bash DIR=$1 IFS=' ' TARGET=(`find "${DIR:=.}" -maxdepth 1 \( -name '*.[Jj][Pp][Ee][Gg]' -o -name '*.[Jj][Pp][Gg]' -o -name '*.[Pp][Nn][Gg]' \)`) if [ ${#TARGET[@]} -eq 0 ]; then echo "No files found in ${DIR:=.}" exit -1 fi #echo ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]} bsetbg ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]} とか。
505 名前:login:Penguin mailto:sage [2008/01/26(土) 00:54:55 ID:a+SvfS+1] >>504 おまいさんの find には -iname は無いのか? あと、bash なら自前で算術計算できるよ bsetbg "${TARGET[RANDOM % ${#TARGET[@]}]}"
506 名前:login:Penguin mailto:sage [2008/01/26(土) 01:31:49 ID:Gp61cAWI] >おまいさんの find には -iname は無いのか? あ、これは知らんかった。有り難う。 >あと、bash なら自前で算術計算できるよ こちらは知っていたけど、元ネタに合わせんと。
507 名前:login:Penguin mailto:sage [2008/01/26(土) 11:11:47 ID:NixStw3D] #!/bin/sh filesize=('du -h ~/file.tmp') $loglen > ~/filesize.txt という感じでfile.tmpのファイルサイズを出力したいのですが 出力結果に不要な部分があります。 欲しい部分だけ切り取るには、どうすればいいでしょうか? よろしくお願いします。 100k /home/user/file.tmp ~~~~~ ~~~~~~~~~~~~~~~~~~~~ ↑ ↑ 欲しい 要らない部分
508 名前:login:Penguin mailto:sage [2008/01/26(土) 11:20:53 ID:NixStw3D] #!/bin/sh filesize=('du -h ~/file.tmp') $filesize > ~/filesize.txt 間違えてしまいました。こんな感じです。 grepで抽出するオプションの書き方も思い付かず スクリプトで処理するには・・・?と、行き詰まってます。
509 名前:login:Penguin mailto:sage [2008/01/26(土) 11:34:50 ID:opXPKDAo] >>508 cut (coreutils)
510 名前:login:Penguin mailto:sage [2008/01/26(土) 11:48:51 ID:NixStw3D] >>509 ヒントありがとうございます。 使い方を調べてみます。
511 名前:login:Penguin mailto:sage [2008/01/26(土) 12:47:23 ID:NixStw3D] >>509 もう少しヒントをください。 cat と coreutils のどちらかを使うや cat か coreutilsのどちらかを使うかや レスの意図を示していただけるとありがたいです。 シェルスクリプト歴数時間で理解が及ばなく申し訳ないです。
512 名前:login:Penguin mailto:sage [2008/01/26(土) 12:52:39 ID:K0Rp0izE] >511 ちょっとでもぐぐってみたのかと. あと猫じゃなくて切るほうな.
513 名前:login:Penguin mailto:sage [2008/01/26(土) 13:12:20 ID:NixStw3D] >>512 調べてみたのですが、広範囲になってきて混乱してきました。 今のところ cat -Tというオプションと、rtというコマンドを発見して コンソール上で du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " " とすると、ファイル数だけ表示されるようになったので うまい方法でもないような気もしつつに #!/bin/sh filesize=('du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "') $filesize > ~/filesize.txt としてみたのですが $./filesize.sh ↓うまく実行できずに困っています。 du: invalid option -- T du: invalid option -- | du: invalid option -- t du: invalid option -- r 詳しくは `du --help' を実行して下さい.
514 名前:login:Penguin mailto:sage [2008/01/26(土) 13:15:18 ID:K0Rp0izE] >513 catじゃなくてcut.たぶんこれ一発でやりたいことはできると思うから調べてみな.
515 名前:login:Penguin mailto:sage [2008/01/26(土) 13:22:31 ID:NixStw3D] >>512 ,514 ありがとうございます。 素で間違えていました。 調べてみます。
516 名前:login:Penguin mailto:sage [2008/01/26(土) 13:24:02 ID:ShBosd97] stat -c %s ではだめなのか
517 名前:login:Penguin mailto:sage [2008/01/26(土) 13:43:18 ID:NixStw3D] コンソールで $ du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1 としたらうまくファイルサイズだけ切り出せたので #!/bin/sh filesize=('du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1') $filesize > ~/filesize.txt と、してみたのですが なにか基本的な構文がおかしいのでしょうか? バックスラッシュやシングル、ダブルクォーテーションを試してみましたが回避できません。 ↓ du: invalid option -- T du: invalid option -- | du: invalid option -- u du: invalid option -- t du: invalid option -- d du: invalid option -- f 詳しくは `du --help' を実行して下さい. >>516 ヒントありがとうございます。 調べてみます。
518 名前:login:Penguin mailto:sage [2008/01/26(土) 14:22:43 ID:/buRKO/4] >>517 これでいいだろ。 du -h /home/user/file.tmp | awk '{print $1}' > ~/filesize.txt
519 名前:login:Penguin mailto:sage [2008/01/26(土) 16:30:30 ID:NixStw3D] >>518 調べたらawkは強力で、いろいろ使えそうです。 出力も当初の予定通りで完璧でした。 ありがとうございます。 結果を変数に代入出来なくなりましたが、構文を参考に>>517 を直したら同様の出力結果で動きました。 #!/bin/sh du -h /home/user/file.tmp | cat -T | cut -d ^ -f 1 > ~/filesize.txt >>516 >>518 さんを参考に手を入れたらキロバイト表示もできました。 ありがとうございます。 ただ、数字の後ろに「k」を入れる方法が判りませんでしたが。 #!/bin/sh stat -c %s /home/user/file.tmp | awk '{printf "%s" ,$1/1024}' > ~/filesize.txt
520 名前:login:Penguin mailto:sage [2008/01/26(土) 16:43:00 ID:/buRKO/4] >>519 stat -c %s /home/user/file.tmp | awk '{printf "%sk" ,$1}' > ~/filesize.txt
521 名前:login:Penguin mailto:sage [2008/01/26(土) 23:58:52 ID:NixStw3D] >>520 応用ありがとうございます! 感謝。
522 名前:login:Penguin mailto:sage [2008/01/29(火) 13:18:07 ID:8n8HPqGB] columnコマンドがない環境でインデント合わせをしたいのですが、 何か良い方法はあるでしょうか?
523 名前:login:Penguin mailto:sage [2008/01/29(火) 15:57:53 ID:8n8HPqGB] lsコマンドで、ファイルのatimeやctimeを取得する方法はあるでしょうか。 HP環境なので、Linuxのstatコマンドがなくて途方にくれています。
524 名前:login:Penguin mailto:sage [2008/01/29(火) 16:05:29 ID:qGMFgswu] >>523 Linux の話じゃないなら板違い。
525 名前:login:Penguin mailto:sage [2008/01/29(火) 16:33:43 ID:yAbAmnAs] ファイルから目的の行を削除して上書きしたいとき, sed -e 2d file >tempfile mv tempfile file のようにすればできるんですが,テンポラリファイルを使わない方法はありますか?
526 名前:login:Penguin mailto:sage [2008/01/29(火) 16:37:12 ID:qGMFgswu] >>525 GNU sed なら -i で。
527 名前:login:Penguin mailto:sage [2008/01/29(火) 21:52:45 ID:6iHka9Si] リダイレクトとサブシェルを駆使してうまいことinplace editをやる技が あったはずなんだがどうやってぐぐればいいかわからん。
528 名前:login:Penguin mailto:sage [2008/01/29(火) 23:11:45 ID:k/ZizWnP] つ named pipe
529 名前:login:Penguin mailto:sage [2008/01/30(水) 00:25:54 ID:/azTEfDv] こんな感じのやつか? $ echo hoge > hoge $ (rm hoge; (echo fuga; cat) > hoge) < hoge 要はサブシェルに開かせておけば中で上書きしても内容は デスクリプタから参照できるからそれでin-place処理できるって奴だな。 上は手抜きだけど、どっかのFAQにデスクリプタ付け替えまくりの例題が 載ってたのだけ覚えてる。csh-whynot文書あたりかも?
530 名前:login:Penguin mailto:sage [2008/01/30(水) 00:35:03 ID:KwdpVGiV] おおう、そんなかんじだったかも。thx
531 名前:login:Penguin mailto:sage [2008/01/30(水) 20:21:01 ID:6DxEwSig] すいません ちょっと今シェルの作り方で困っているのですが やりたいことは 一つのフォルダに入っているファイルを、ファイル名によって3つのフォルダに振り分けたいのです。 その際に、どのファイルをどのフォルダに移動するのかはシェルの中に記述するのではなく、 ファイル名の一覧が書いてあるtxtファイルを一行ずつ読んで振り分けたいのです。 ですが、作り方が今いちわかりません。 例えばA,B,Cと分かれていたら 1、Aのフォルダに振り分けるファイル名が書かれたtxtファイルを読む 2、同じファイル名がヒットしたらAに送る 3、次にBのフォルダに振り分けるファイル名が書かれたtxtファイルを読む 4、同じファイル名がヒットしたらBに送る ファイル名が書かれたtxtファイルはA用B用C用の3種類用意します。 どうやって作ればいいのでしょうか?
532 名前:login:Penguin mailto:sage [2008/01/30(水) 20:36:32 ID:CiuX3/ZK] シェルの作り方なんぞ知るかい。
533 名前:login:Penguin mailto:sage [2008/01/30(水) 20:38:30 ID:0RlCwXSW] 宿題は自分でやれ。
534 名前:login:Penguin mailto:sage [2008/01/30(水) 21:41:32 ID:wmsZ0JX8] >531 testコマンドでググレカス ファイルの読み込み方すらわかんねーなら本一冊買って出直して来い
535 名前:login:Penguin mailto:sage [2008/01/30(水) 21:48:11 ID:6DxEwSig] うわー 冷たい しかも叩く時だけは一気にレスがつくんだね >>532 >>533 わからないなら無理にレスしなくていいです
536 名前:login:Penguin mailto:sage [2008/01/30(水) 22:48:33 ID:5hT959VT] さいきんの、このバカの質問な感じのには >>わからないなら無理にレスしなくていいです に類する文言が書き込まれる率が高いな、て思えるんだが、これは 1. この手のバカは結局バカだから、おなじようにしか考えられない 2. 実は同じヤツが何度も釣りに励んでいる のどちらか、ということだろうか?
537 名前:login:Penguin mailto:sage [2008/01/30(水) 22:54:16 ID:KwdpVGiV] シェルを作るのは結構高度な作業だからな。
538 名前:login:Penguin mailto:sage [2008/01/30(水) 22:59:49 ID:v0ETiHGx] >>536 真・教えて君養成マニュアルとかがどっかにあるんじゃないか?w
539 名前:login:Penguin mailto:sage [2008/01/30(水) 23:01:22 ID:sxNLHjSv] >537 最近はGUIの環境もシェルと呼んだりするらしいしね. ところで,シェルスクリプトをシェルと略す感覚が信じられない.せめてスクリプトのほうを残すべきじゃないのか,意味的に…
540 名前:login:Penguin mailto:sage [2008/01/30(水) 23:05:38 ID:j0KqLeiL] 教えてクン養成マニュアル www.redout.net/data/osietekun.html
541 名前:login:Penguin mailto:sage [2008/01/30(水) 23:39:48 ID:KwdpVGiV] >>539 GUIのシェルってのはそう最近でもないと思う。 DOSSHELLとか、X68kのVS.Xとかあったじゃないか。
542 名前:login:Penguin mailto:sage [2008/01/31(木) 00:54:52 ID:5zXcU2rl] >>531 うわーきもい。シェルを作るという表現はおかしい シェルの作り方って、VBの作り方、Javaの作り方 聞いているのと同じ。それをKY言うのは異常。 for文とifを組み合わせれてループさせれば。
543 名前:login:Penguin mailto:sage [2008/01/31(木) 05:38:28 ID:sRx07lee] >>535 >わからないなら無理にレスしなくていいです。 たぶんここの人は9割以上わかっていると思う。
544 名前:login:Penguin mailto:sage [2008/01/31(木) 05:47:16 ID:sRx07lee] やる気がおきない。 態度の豹変に腹が立つ。 mv -i `neko a.list` a mv -i `neko b.list` b mv -i `neko c.list` c
545 名前:login:Penguin mailto:sage [2008/01/31(木) 13:37:31 ID:zeMbksrC] >>544 単純にnukoするよりもls -1 | grep -f a.list とかしてより分けた方が良くないか?
546 名前:login:Penguin [2008/01/31(木) 19:50:10 ID:/M27f8ta] for 変数名 in 10 20 30 do echo $変数名 done この構文の変数名ってなんでもいいんですか? あとこれを実行すると 10 20 30 になりますよね?
547 名前:login:Penguin mailto:sage [2008/01/31(木) 20:53:32 ID:p8W84r95] >>546 変数名に使える文字は英字と数字、アンダースコアのみな。
548 名前:login:Penguin mailto:sage [2008/01/31(木) 21:07:34 ID:Ih8EaxE5] すると、うちのbashはおかしい。。。 $ for 9_var in 10 20 30; do echo $9_var; done bash: `9_var': not a valid identifier
549 名前:login:Penguin mailto:sage [2008/01/31(木) 21:49:51 ID:g7asi3X7] もしかして>>351 == >>548 なんか? こんなところで釣りなんかすんなよ... もし釣りじゃなくってバカなんだったら、せめてmanするとかググるセンセに聞くとか、な?
550 名前:548 mailto:sage [2008/01/31(木) 22:00:40 ID:m8vTasa1] その話題では>>354 だが、なぜ351と?
551 名前:login:Penguin mailto:sage [2008/01/31(木) 23:25:56 ID:g7asi3X7] >>550 う゛、勘違いとかtypoとか。いかんな、落ち着かんと。 でもってマヂレスしとくと、変数の1文字目は数字じゃダメな。
552 名前:login:Penguin mailto:sage [2008/02/01(金) 20:50:34 ID:aG/PrNJ9] kakikomi.txtというテキストファイルがあったとします。 STRING1 を含んでいて、かつ STRING2も含んでいる行だけを 印字しようとおもうのですが、 grep STRING1 kakikomi.txt| grep STRING2 くらいしか思いつきません。二度手間な気がします。 もう少しいい方法ありませんか?
553 名前:login:Penguin mailto:sage [2008/02/01(金) 20:57:02 ID:IKSH1LNN] >552 -e
554 名前:login:Penguin mailto:sage [2008/02/01(金) 21:42:25 ID:KLEwAeBF] >>552 それ前スレ(UNIX板のほうだったかも試練)で話題になったな 「STRING1とSTRING2を『順不同で』含む行をイッパツで引っ掛けようとしたら egrep '(STRING1.+STRING2)|(STRING2.+STRING1)' となってしまう。2個ならまだいいが、3個、4個...と増えていくと正規表現がキモいことになってしまう。 順不同という条件なら、>>552 のやり方が一番シンプル
555 名前:login:Penguin mailto:sage [2008/02/01(金) 22:20:29 ID:9CGaNXUy] awk '/STRING1/&&/STRING2/' kakikomi.txt とか。
556 名前:login:Penguin mailto:sage [2008/02/01(金) 23:10:27 ID:aG/PrNJ9] >>554 ,555 ありがとうございました。 最近暇なので本でいろいろ勉強してみます。
557 名前:login:Penguin [2008/02/02(土) 02:58:37 ID:jQtmOvcu] 例えばここに置いてある松金洋子のデスクトップ用壁紙画像をターゲットとする。 www.sexydesktop.co.uk/youko.htm ここには全部で4ページ分48種類の松金洋子の画像がある。 ## このサイトの画像はすべてデスクトップ用の壁紙を目的としているので、 ## 一つの画像に関して数種類の解像度・縦横比の画像が用意されており、 ## アクセスしてきた人の使っているディスプレイ解像度を検出しては、 ## 最適な解像度のものを優先的にプッシュするようになっている。 ## また、画像ファイルの命名ルールは非常に単純かつ形式的で、 ## たとえば例に挙げた松金洋子の画像の場合、 ## まず画像の名前を表す youko1 から youko48 までの48種類の画像が用意されている。 ## さらにそれぞれの解像度を表す 1280x800 や 800x600 の文字列が続き、 ## 最後に拡張子 .jpg が付けられている。 ## 注意する点があるとすると、例えば youko48 に対して youko01 だとか、 ## 1280x1024 に対して 0800x0600 といった「桁数合わせ」が一切行われていないということ。
558 名前:557 [2008/02/02(土) 02:59:35 ID:jQtmOvcu] ここから先が質問。やりたいことは、 1). サイトがプッシュしてくるこちらのディスプレイ解像度に関係なく、 すべての画像について、解像度のより大きいバージョンを、 番号の一番若いものから古いものまで全種類取って来たい。 2). その際、取って来た画像のファイル名を修正して、 youko48 に対しては youko01 、1280x1024 に対して 0800x0600 などの「桁数合わせ」をしたい。 3). さらに、ファイル名の中の画像名を表す文字列と、解像度を表す文字列とを _ で結ぶようにしたい。 具体的には、youko11600x1200.jpg と名付けられた youko1 という画像の 1600x1200 版のファイル名を、youko01_1600x1200.jpg としたい。同様に、youko481280x1024.jpg と名付けられた youko48 という画像の 1280x1024 版のファイル名を youko48_1280x1024.jpg としたい。 以上をまとめると、参考例の松金洋子の画像で言えば、 youko11600x1200.jpg から youko481280x1024.jpg までの画像を、 youko01_1600x1200.jpg から youko48_1280x1024.jpg として保存したい。 これを実現するスクリプトをどう書けばいいでしょうか? なお、好みのタレントの画像が何種類用意されているか(松金洋子の場合は48種類)については、 ダウンロードを開始する前に手作業で調べることとします。
559 名前:login:Penguin mailto:sage [2008/02/02(土) 03:11:26 ID:BYWZpRq/] >>557-558 まずお前が考えて出来たスクリプトをうpしろ 話はそれからだ
560 名前:557-558 [2008/02/02(土) 03:17:30 ID:jQtmOvcu] んー、俺はスクリプトに無知だから、一から十まで全部取って来て、 後で手作業で仕分けする、みたいな超バカなことしかできんのです。 だからエロい人に教えてほしいんです。。 ダメならヒントだけでもいいので下さい。
561 名前:login:Penguin mailto:sage [2008/02/02(土) 03:19:54 ID:BYWZpRq/] >>557-558 ほらよ っ google.co.jp
562 名前:login:Penguin mailto:sage [2008/02/02(土) 07:40:21 ID:QLk1rUEb] 地道にループ回すしかないのでは たぶんリネーム関連はperlか何か使ったほうがラクじゃね?
563 名前:login:Penguin mailto:sage [2008/02/02(土) 08:38:47 ID:VQl51rL6] 2).3). youko0123456789x0123456789.jpg というファイル名はどのように整形すれば?
564 名前:login:Penguin [2008/02/02(土) 10:16:29 ID:2Gx0/Giv] $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa +bbbbbbbbbb cccccccccccccccccccccccc +ddddddddddddddd 長い行は先頭に+をつけて折り返しているという内容のファイルを $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd というように+の折り返しを前の行の後ろに空白付で結合させるにはどうすればいいでしょう?
565 名前:login:Penguin mailto:sage [2008/02/02(土) 10:19:50 ID:QLk1rUEb] cat test.txt | tr '\n+' ' 'とかどう?
566 名前:login:Penguin mailto:sage [2008/02/02(土) 10:34:51 ID:2Gx0/Giv] >>565 実行したら $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd みたいになりましたが $cat test.txt aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd これが出力としてほしいです。 \nと+が別で判断されているのでしょうか・・・
567 名前:login:Penguin mailto:sage [2008/02/02(土) 10:37:11 ID:QLk1rUEb] 間違った.cat test.txt | tr '\n\+' ' 'で.
568 名前:login:Penguin mailto:sage [2008/02/02(土) 10:39:50 ID:QLk1rUEb] ごめん,俺嘘ばっかり言ってるから気にしないでorz
569 名前:login:Penguin mailto:sage [2008/02/02(土) 10:41:24 ID:2Gx0/Giv] >.567 同じ結果でしたw レスありがとう!
570 名前:557-558 [2008/02/02(土) 10:50:34 ID:jQtmOvcu] >>563 どうもです。 えー、そういう名前のファイルは存在しないので考えてもみませんでした。 >>562 もし $name$no1024x768$suffix がある時 $name$no1024x0768$suffix にせよ、 みたいなことを延々とやる、ということなんでしょうか?(←無知) うーん。。。
571 名前:login:Penguin mailto:sage [2008/02/02(土) 11:02:51 ID:jHuzpaac] >>564 if 先頭が+じゃない then echo "" else echo -n " " fi echo -n 行
572 名前:login:Penguin mailto:sage [2008/02/02(土) 12:30:06 ID:A3vIBKBi] >>564 sed 'N;s/\n+/ /;t;P;D'
573 名前:login:Penguin mailto:sage [2008/02/02(土) 14:09:27 ID:2Gx0/Giv] >>572 ありがとうございます!!
574 名前:login:Penguin mailto:sage [2008/02/05(火) 19:10:25 ID:E60rvXpx] /tmpにあるディレクトリをリストし そこからディレクトリ名だけを切り取りたいと考えています。 /tmpには a b c というディレクトリがあるとして $ find /tmp -type d -maxdepth 1 -mindepth 1 | xargs awk -F/ '{print $NF}' を実行すると a だけが出力されてしまいます。 望んでいる出力は a b c なのでうまく出力されるようにしたいです。 findのみを実行すると /tmp/a /tmp/b /tmp/c と出力されることは確認しました。 申し訳ないのですが良い方法をご教授ください。
575 名前:login:Penguin mailto:sage [2008/02/05(火) 19:18:42 ID:DHgW4Gk4] find /tmp -maxdepth 1 -mindepth 1 -type d | awk -F/ '{print $NF}' find /tmp -maxdepth 1 -mindepth 1 -type d | sed -e 's/.*\///' find /tmp -maxdepth 1 -mindepth 1 -type d -exec basename {} \;
576 名前:574 mailto:sage [2008/02/05(火) 19:21:21 ID:E60rvXpx] >>574 で実行したコマンドは $ find /tmp -type d -maxdepth 1 -mindepth 1 | xargs echo | awk -F/ '{print $NF}' の間違いでした。 よろしくおねがいします。
577 名前:574 mailto:sage [2008/02/05(火) 19:22:58 ID:E60rvXpx] >>575 望みどおりの出力を得ることができました! 早い回答感謝します。 ありがとうございます。
578 名前:login:Penguin mailto:sage [2008/02/06(水) 21:11:41 ID:Qs2nEtFk] すみません、次の表現ってどういう意味なんでしょうか ($Fはlsの結果が入る) if expr "$F" : '[[:alunum:]_-]\+$' > /dev/null 2>&1; then ... 特に : '[[:alunum]_-]\+$'の箇所が分かりません 自分で調べて分かったのは [:alunum:]が数値を表すPOSIX準拠の文字クラスであること :はヌルコマンド []が正規表現とすると[[:alnum:]_-]\+$は以下のいずれかという意味でしょうか 数値+$ _+$ -+$ だとしても前半の:とのつながりもよく分からないです..
579 名前:login:Penguin mailto:sage [2008/02/06(水) 21:39:32 ID:2Q3KS/FB] そのコロンはexpr の引数であって、パターンマッチを行わせるもの。 ヌルコマンドではない。 [[:alnum]]_-]¥+$ は、 「英数もしくは _ もしくは -」([[:alnum]]_-])の繰り返し(¥+)で末尾になる($)パターン。 つまり$Fが↑のパターンにマッチするかで判断するif文だな。 出力を/dev/nullに捨てている理由は、exprの動作を調べればわかる。
580 名前:login:Penguin mailto:sage [2008/02/06(水) 22:12:35 ID:Qs2nEtFk] >>579 ありがとうございます。やっと理解できました! exprについては、nullまたは0を返した際に0を返すという仕様のため /dev/nullに出力していることはすぐ分かったんですが 「:」もexprの構文だったんですね ずっとシェルのパターンマッチの構文として「:」を調べていたため ハマってました,thx!
581 名前:login:Penguin mailto:sage [2008/02/07(木) 17:29:04 ID:SojUAx7O] リダイレクトで先頭5行目から行末から5行目前までを出力したいのですが、 ??? | head -n xx | tail -n xx 以外に良い方法はあるでしょうか
582 名前:login:Penguin mailto:sage [2008/02/07(木) 18:31:29 ID:K+RTjMO0] なにをしたいのか、君の示した例は本当に目的を満足してるのか、 もういちど確認した方がよいと思われ
583 名前:login:Penguin mailto:sage [2008/02/08(金) 08:15:13 ID:D8JF1iVI] では、headとtailは使わずに。 sed -n '5,$p' file.txt | tac | sed -n '5,$p' | tac …意義が見出せない。。。
584 名前:581 mailto:sage [2008/02/08(金) 15:35:34 ID:aAYt8gpF] >>583 sedは習ってないので提出できないんですよ 他にないですか?
585 名前:login:Penguin mailto:sage [2008/02/08(金) 15:38:14 ID:Yg3sGZTq] >>584 白紙で出せば...
586 名前:login:Penguin mailto:sage [2008/02/08(金) 16:08:13 ID:z5e2UbEF] { read a;read a;read a;read a;tac; } | { read a;read a;read a;read a;tac; }
587 名前:login:Penguin mailto:sage [2008/02/08(金) 16:57:33 ID:rygBoGE6] 習っていないと使えないって、そんな小学校じゃあるまいし
588 名前:login:Penguin mailto:sage [2008/02/08(金) 19:53:27 ID:8gRlFmfx] >sedは習wwwwってwwないのwwwで提出でwwきないんですよww >他になwwwwいですか?www のように、wを適当にまぶすスクリプトを誰か考えてくれ。
589 名前:login:Penguin mailto:sage [2008/02/08(金) 21:34:44 ID:Z8wDJkcZ] >>588 こんなwwのを作っwwwwてみたんwwだがww どうだろうかwww とりあえずwwwwちゃんwwと動いてるよwwうだがwwww どんな例外wwがあるwwかわからんwww #!/bin/sh CHAR='w' insertw() { i=0 w=`expr $RANDOM % 3 + 2` while [ $i -lt $w ]; do i=`expr $i + 1` echo -n $CHAR done } while read LINE ;do while [ "$LINE" ]; do r=`expr $RANDOM % 6 + 2` echo -n `echo $LINE | cut -c -${r}` insertw r=`expr $r + 1` LINE=`echo $LINE | cut -c ${r}-` done echo "" done
590 名前:589 mailto:sage [2008/02/08(金) 21:45:59 ID:Z8wDJkcZ] 初心wwww者でサーセンww $RANDwwwwOM使wwってるのwwwで本wwww当のshではww動かなwwwいはずだけど,wwwここはwwLinux板wwwってことwwwで許wwwwしてもらえるwwよね?
591 名前:login:Penguin mailto:sage [2008/02/09(土) 21:05:58 ID:sA/Tx79N] あの〜、正規表現についてお聞きしたいのですが [a-z]で小文字のアルファベット全てにマッチですよね。 ならば [あ-ん]でひらがな全てにマッチしますか?
592 名前:login:Penguin mailto:sage [2008/02/09(土) 21:44:35 ID:y7ESpv1X] yes
593 名前:login:Penguin mailto:sage [2008/02/10(日) 00:32:01 ID:HzElnwAK] 「ぁ」はマッチしないのでは? それはそうと、多バイト文字の正規表現って、大抵のアプリケーションで普通に使えるものなのか。 知らなんだ。
594 名前:login:Penguin mailto:sage [2008/02/10(日) 01:02:27 ID:bq0IfXwT] 質問です。ファイルの対象部分に別のファイルを挿入するコマンドってありますか? % cat file1 aaa%sbbbccc % cat file2 ZZZ % hoge %s file2 < file1 aaaZZZbbbccc のような動作を期待しています。 挿入するファイルは少し長めなのでsedで置換ではできない気がしています。 awkあたりでfile1を%sが出るまで出力 -> file2を出力 -> file1の%s以降を出力 という方法を考えていますが、もし専門のコマンドがあれば教えてください。
595 名前:594 mailto:sage [2008/02/10(日) 01:12:39 ID:bq0IfXwT] 誤爆先でm4というのを教えてもらいました。 一旦使ってみます
596 名前:login:Penguin [2008/02/10(日) 01:14:06 ID:AyxHcvsn] そういうのはエディタで
597 名前:login:Penguin mailto:sage [2008/02/10(日) 01:52:24 ID:EflaE009] >>595 おまえFedoraすれにいなかったか?
598 名前:login:Penguin mailto:sage [2008/02/10(日) 06:29:30 ID:7q9QRaK3] >>594 printf "`cat file1`\n" `cat file2`
599 名前:login:Penguin mailto:sage [2008/02/11(月) 23:47:20 ID:wSzjm7y4] >>593 grep でやってみたらマッチしやがったよ。
600 名前:login:Penguin mailto:sage [2008/02/12(火) 02:36:00 ID:NhGbxXsu] 文字列として検索できるということと、 全角文字も一文字として扱える、というのとでは意味がぜんぜん違う。
601 名前:login:Penguin mailto:sage [2008/02/13(水) 03:57:10 ID:Z8x6psMH] [あ-ん]と[\xe4\x1c-\xe4\x5f]ではまるで別物だしな(コードは適当)
602 名前:login:Penguin mailto:sage [2008/02/13(水) 23:44:52 ID:3LjmFUst] #スレ違いだが。 MS-Windowsとの可搬性に最も富むスクリプトは何ですか? ただし、cygwin環境とperlは除外して。
603 名前:login:Penguin mailto:sage [2008/02/13(水) 23:58:15 ID:jHUDsaVW] >>602 javascriptに一票
604 名前:login:Penguin mailto:sage [2008/02/14(木) 00:56:22 ID:axFZQkw/] >>602 awk,ruby,Python つーかなんでperlダメなの? たしかにWinのperlめんどいけどね。
605 名前:login:Penguin mailto:sage [2008/02/14(木) 20:13:50 ID:oi3zsBt5] ディレクトリにあるmp3ファイルを1行に3つずつ番号付きで表示して 指定されたファイルを再生するスクリプトを考えてみました。 これだとファイル表示の見た目がいまいちなんですが、カラムを揃えて 表示するようなうまいやり方はありますか? i=1 for file in *.mp3 do #3カラムで出力する x=`expr $i % 3` if [ $x -eq 0 ] then echo -e "\033[1;31m$i\033[0m.$file" else echo -en "\033[1;31m$i\033[0m.$file " fi a[i]=$file (( i=i+1 )) done echo -n "number? >" read n if [ -f "${a[n]}" ] then mplayer "${a[n]}" else echo "ファイルがありません" fi
606 名前:login:Penguin mailto:sage [2008/02/14(木) 21:53:57 ID:gBoeKdqH] >>605 #!/bin/sh FS=`zenity --file-selection` #このままだと動画なんかもいけるけど、どうしても*.mp3のみにしたい場合は↑行を #コメントアウトして↓行を有効にする #FS=`ls *.mp3 | zenity --list --column "Files"` if [ -z "${FS}" ] then exit fi mplayer "$FS" なんつってってねw
607 名前:login:Penguin mailto:sage [2008/02/14(木) 22:01:12 ID:vsXOhty3] zenityってなんだろーと思ってググったら……反則すぎ。
608 名前:login:Penguin mailto:sage [2008/02/14(木) 22:52:41 ID:fZu2vsjD] >>604 perl.exeの他に色々MS-Windows側に入れなきゃならないものがあるので可搬性に欠けるという理由を考えてみましたが、実は嫌いなだけです。 >>605 3列にこだわらないのなら、bashのselectはどうでしょう。 #!/bin/bash select name in *.mp3 do echo "mplayer ${name}" #break done
609 名前:login:Penguin mailto:sage [2008/02/15(金) 02:46:55 ID:4QUqq28I] >>605 printf で頑張るという選択肢もある。
610 名前:605 mailto:sage [2008/02/15(金) 19:02:00 ID:BuE7cyMU] >>605 の件ですが、レスしてくれた方々、ありがとうございます。 selectを使うのが簡単でイメージどおりなので、それでいきたいと思います。
611 名前:login:Penguin mailto:sage [2008/02/16(土) 14:41:12 ID:rUKDlild] 久しぶりに来たけど相変わらず キモいね
612 名前:login:Penguin mailto:sage [2008/02/16(土) 14:52:30 ID:TWToK0Vy] シェルに閉じこもってるスレですから
613 名前:login:Penguin mailto:sage [2008/02/16(土) 15:09:40 ID:hFdiJNir] ちょっとは環境変数も気にしろよ
614 名前:login:Penguin mailto:sage [2008/02/16(土) 15:14:02 ID:TWToK0Vy] export KIMOI=false
615 名前:login:Penguin mailto:sage [2008/02/16(土) 15:25:59 ID:hFdiJNir] $ export KIMOI=false > if [ $KIMOI ]; then > echo kimoi > else kimokunai > fi kimoi となります.助けてください><
616 名前:login:Penguin mailto:sage [2008/02/16(土) 16:57:40 ID:TCXFbGKj] 釣られてやるが if $KIMOI; then
617 名前:login:Penguin mailto:sage [2008/02/16(土) 19:13:59 ID:TWToK0Vy] いやいや、キモイとかキモクナイを超越することこそが答なのだよ。 export KIMOI= が正解なのだ。
618 名前:login:Penguin mailto:sage [2008/02/17(日) 01:08:38 ID:iw9ufgAV] >>615-616 なぜそうなるか素人の私にも解説してくだされぇ〜
619 名前:login:Penguin mailto:sage [2008/02/17(日) 01:11:52 ID:slw092IT] >>616 素で知らなかった.ありがと!
620 名前:login:Penguin mailto:sage [2008/02/17(日) 01:27:34 ID:PyTcVmai] /usr/bin/[≒/usr/bin/test
621 名前:login:Penguin mailto:sage [2008/02/17(日) 03:00:02 ID:tnXxiXa8] >>618 if文やwhile文の条件部に書くのは、実はコマンド。 コマンドの終了コードが0なら条件が成立したとみなされる。 で、true(0を返す)やfalse(1(非0)を返す)というコマンドがあるわけだな。 ちなみに [ もコマンドだ。
622 名前:login:Penguin mailto:sage [2008/02/17(日) 09:32:32 ID:OGJD7PPY] みんな釣られ過ぎ… $KIMOIに"false"という文字列を代入してるだけ。
623 名前:login:Penguin mailto:sage [2008/02/17(日) 14:07:35 ID:4A7UiB6D] >>612 俺らはゴーストですか
624 名前:login:Penguin mailto:sage [2008/02/17(日) 14:21:15 ID:slw092IT] >>623 ネットは広大だよな
625 名前:login:Penguin mailto:sage [2008/02/17(日) 14:29:38 ID:uY7SK9GA] >>623 否、貴腐人間かもw
626 名前:login:Penguin mailto:sage [2008/02/17(日) 14:38:41 ID:slw092IT] >>625 元ネタwkrn
627 名前:login:Penguin mailto:sage [2008/02/17(日) 14:42:27 ID:uY7SK9GA] >>626 「貴腐老人」でggrks
628 名前:login:Penguin mailto:sage [2008/02/17(日) 14:44:26 ID:slw092IT] >>627 tnks
629 名前:login:Penguin [2008/02/18(月) 07:12:54 ID:AGIm4SRV] zenity でファイルの選択をさせるのに、最初に任意のフォルダを開くにはなんと書けばいいのか教えて下さい。
630 名前:login:Penguin mailto:sage [2008/02/18(月) 11:55:16 ID:VgIMGwkB] カレントディレクトリを開くみたいだから、サブシェルを使ってこんな感じでどうかな (cd /; zenity --file-selection)
631 名前:login:Penguin [2008/02/18(月) 13:16:10 ID:AGIm4SRV] >>630 ありがとうございます。 やってみます。
632 名前:login:Penguin mailto:sage [2008/02/19(火) 08:50:21 ID:90boQwVS] シェルスクリプトを覚えるとなにが出来るようになるんですか?
633 名前:login:Penguin mailto:sage [2008/02/19(火) 09:00:32 ID:7ADZuvq7] >>632 ルーチンワークで楽できる(場合がある)
634 名前:login:Penguin mailto:sage [2008/02/19(火) 16:05:41 ID:VrKwqWf/] >>632 作業の自動化や、例えばユーザを100人登録しないといけないとか言う、膨大な作業を 物凄い速度で短時間で終わらせる事が出来るようになるとか。
635 名前:login:Penguin mailto:sage [2008/02/19(火) 17:25:49 ID:90boQwVS] >>633 >>634 ほほぅ、ありがとうございます。
636 名前:login:Penguin mailto:sage [2008/02/19(火) 19:54:38 ID:oWc/fsPo] ほほうって、コンピュータに仕事をさせるという観念のない人なんだろうか。 高級な紙と鉛筆だとしか思ってなさげな人。たまにいるけど……。
637 名前:login:Penguin mailto:sage [2008/02/19(火) 19:56:54 ID:7ADZuvq7] 魔法の箱だと思ってるよりマシだと思う
638 名前:login:Penguin mailto:sage [2008/02/19(火) 23:07:22 ID:VrKwqWf/] コンピュータは ある機能を実現させる為の方法(アルゴリズム)を示してやれば どんなにそれが重労働だろうが難しい計算をしないといけなかろうが、 忠実に高速かつ正確、大量に実行させる事が出来るから凄いよ・・・。 ただし、その仕事の仕方を教える(アルゴリズムを教える)のがかなり苦労するんだけどな・・・。
639 名前:login:Penguin mailto:sage [2008/02/20(水) 03:07:58 ID:eOYCs3Nz] 基本的に人間がやってもできることを高速ですることしかできないということを知らない人が多すぎる
640 名前:login:Penguin mailto:sage [2008/02/20(水) 03:37:12 ID:Z0UaqwNw] それは、一秒間に3ギガ回も足し算したり、地球の裏側に光の速度で手紙を届けたりなんつーのは 基本的に人間には絶対できない、ということを知らない者は>>639 だけだというだけの話かと。
641 名前:login:Penguin mailto:sage [2008/02/20(水) 04:33:00 ID:H+YlTABW] 君も頭悪いな。 639は高速で、と書いてあるんだから、「速度を問わなければ」人間が…と 読むのが妥当という答にしかならないぞ。 どうせそういう突っ込みするなら空間計算量でやればよかったのに。
642 名前:login:Penguin mailto:sage [2008/02/20(水) 07:24:32 ID:kPfB9gdm] 理論ばっかりのたまって生産性の無い人ってよくいるよね。
643 名前:login:Penguin mailto:sage [2008/02/20(水) 08:22:42 ID:TBsfl6zQ] まとめ。 Q) シェルスクリプトを覚えるとなにが出来るようになるんですか? A) 理論ばっかりのたまって生産性の無い人ってよくいるよね。
644 名前:login:Penguin mailto:sage [2008/02/20(水) 09:09:29 ID:s2YtVBn2] >>632 シェルスクリプトでやりたいと思ったこと。
645 名前:login:Penguin mailto:sage [2008/02/20(水) 10:22:00 ID:0BB6Gw/L] 俺は…彼女にパイズリして欲しいな…。 乳はAAだけど orz
646 名前:login:Penguin mailto:sage [2008/02/20(水) 10:22:28 ID:0BB6Gw/L] >>645 誤爆った。正直スマンかった。
647 名前:login:Penguin mailto:sage [2008/02/20(水) 10:47:15 ID:VHJ6cFjQ] >>645 基本的に彼女ができないことなのでシェルスクリプトでもできません。
648 名前:login:Penguin mailto:sage [2008/02/20(水) 11:22:35 ID:eOYCs3Nz] >>647 AAでもいいということなので,アスキーアートでおっぱいを表現することならシェルスクリプトで可能です さらに最近のターミナルエミュレーターはアンチエイリアスがきいてるのでなめらかですよ
649 名前:login:Penguin mailto:sage [2008/02/20(水) 11:31:04 ID:Z0UaqwNw] すごいな。>>641 は地球の裏側に手紙を届けたりなんてことが「ゆっくりならできる」そうだ。 できるというなら精々一生をかけて歩いて船をこいで手紙を届けにいって、それを証明してほしいものだ。 コンピュータという人間が使うモノが、人間以上の方法(アルゴリズムなどの知性)を知らないのは当然のことだが 最近ではその知性すら、コンピュータを使ったシミュレーション解析などで 得ることが増えているのが現実だったりするわけで。特に知の最先端ほどそうだ。 もはや人類はコンピュータを使わないと新しい知識を得ることすら「できない」状況なんだけどね。 そういう現実が見えない人はやっぱり自分の納得を唯一の判断基準とする文系人かな。 人間は遠くのものが見え、遠くの人と話し、より多くの知識を得、共有できるようになった。 100年前に比べたら、ほんとうに夢の魔法かコミックの世界だ。コンピュータはほんとに魔法の箱みたいじゃないか。 そのセンスは逆にあまり間違っていない気がするけどな。 「高度に進んだ科学技術はもはや魔法と見分けがつかない」アーサー・C・クラーク
650 名前:login:Penguin mailto:sage [2008/02/20(水) 12:06:00 ID:eOYCs3Nz] >>649 日本語でおk 電報というものがあるんだが最近のゆとりは知らないのか?
651 名前:login:Penguin mailto:sage [2008/02/20(水) 12:14:29 ID:pg37fRgc] ゆとり言いたいだけちゃうんかと
652 名前:login:Penguin mailto:sage [2008/02/20(水) 12:23:41 ID:XajlgLxx] ネタはよそでやっとくれよ。
653 名前:login:Penguin mailto:sage [2008/02/20(水) 16:28:17 ID:vrkF+BtG] このスレの>>640 や>>641 の意見が興味深い。面白いな・・・。 >>648 そういうシェルスクリプト作って公開してよwwwwぜひ実行してみたい・・w
654 名前:login:Penguin mailto:sage [2008/02/20(水) 19:29:13 ID:7TuVNRao] 先日の芥川賞受賞作が>>649 の文章に似てる。 句点から次の句点まで地球半周ぐらいあって、だらだらと続く感じが。 sankei.jp.msn.com/culture/academic/080116/
655 名前:login:Penguin mailto:sage [2008/02/21(木) 06:19:36 ID:FDbXS9I4] >>649 こういう無駄な長文を書ける才能には素直に感心するよ。
656 名前:login:Penguin mailto:sage [2008/02/21(木) 12:33:09 ID:xpu03eg4] 時間を持て余してるんだろ?
657 名前:login:Penguin mailto:sage [2008/02/21(木) 18:35:15 ID:oj1Q2W6E] ある意味うらやましい知性だ。
658 名前:login:Penguin mailto:sage [2008/02/24(日) 10:15:17 ID:RUTtO6AQ] slコマンドってなかった?画面いっぱいにSLを表現 あれはシェルスクリプトではないから違うか・・・。
659 名前:login:Penguin mailto:sage [2008/02/24(日) 11:38:47 ID:kyu4Np6c] >>658 つ www.tkl.iis.u-tokyo.ac.jp/~toyoda/
660 名前:login:Penguin mailto:sage [2008/02/24(日) 13:02:41 ID:FjGZZj6V] bashです。 cdするたびに一緒にlsもして欲しいんですが、どうやって書いたらいいでしょうか? aliasだとうまくできないです。
661 名前:login:Penguin mailto:sage [2008/02/24(日) 13:04:14 ID:UaS7yo8D] alias cls='cd $1 && ls'
662 名前:login:Penguin mailto:sage [2008/02/24(日) 13:21:41 ID:CzUoXlF2] clsといったらCLear Screenだろうに
663 名前:login:Penguin mailto:sage [2008/02/24(日) 13:24:30 ID:UaS7yo8D] そうなのか。うちにはそんなコマンドないって言われたもので。
664 名前:login:Penguin mailto:sage [2008/02/24(日) 14:04:47 ID:I77Y2jQo] そりゃDOSのコマンドだからな。
665 名前:login:Penguin mailto:sage [2008/02/24(日) 14:44:06 ID:FjGZZj6V] >>661 できないみたいです。 カレントディレクトリが切り替わりません。
666 名前:login:Penguin mailto:sage [2008/02/24(日) 14:53:32 ID:UaS7yo8D] >>665 うちでは動作確認したんだが・・・なんでだろね。
667 名前:login:Penguin mailto:sage [2008/02/24(日) 14:54:08 ID:UaS7yo8D] あ、ほんとだ、切り替わらないねw
668 名前:login:Penguin mailto:sage [2008/02/24(日) 15:09:41 ID:I77Y2jQo] PROMPT_COMMAND='if [ "$PWD" != "$PWD2" ]; then ls; PWD2="$PWD"; fi'
669 名前:login:Penguin mailto:sage [2008/02/24(日) 15:13:49 ID:uTpa9gVS] >>667 ぢゃあ関数にしちゃうとか。 function cls { cd $1 && ls }
670 名前:login:Penguin mailto:sage [2008/02/24(日) 15:23:08 ID:UaS7yo8D] cdはシェルの内部コマンドだから親プロセスには反映されないんだねえ。 #!/bin/sh cd $1 ls として、foo.shとして、 alias cds='. foo.sh' かなあ。動作確認はしたw
671 名前:login:Penguin mailto:sage [2008/02/24(日) 15:36:14 ID:FjGZZj6V] できればclsじゃなくてcdでやりたいです。 >>669 ,670 でcdにするとなぜか動かない。 でも参考になりました。 >>668 わかんないです。
672 名前:login:Penguin mailto:sage [2008/02/24(日) 15:41:52 ID:FjGZZj6V] #!/bin/sh 'cd' $1 ls として、foo.shとして、 alias cd='. foo.sh' でできました。(・∀・)イイ! ありがとう。
673 名前:login:Penguin mailto:sage [2008/02/24(日) 15:42:06 ID:Sa+MU/+b] cd() { builtin cd $1 && ls }
674 名前:login:Penguin mailto:sage [2008/02/24(日) 15:46:14 ID:I77Y2jQo] ( ゚д゚)……
675 名前:login:Penguin mailto:sage [2008/02/24(日) 15:47:40 ID:UaS7yo8D] >>673 ビルトインか。やっぱりman読まないとダメだな。 ありがとう。
676 名前:login:Penguin mailto:sage [2008/02/24(日) 15:54:18 ID:l3aT8ww/] ほう、すげっ
677 名前:login:Penguin mailto:sage [2008/02/24(日) 15:55:21 ID:FjGZZj6V] >>673 それも(・∀・)イイ! トン
678 名前:login:Penguin mailto:sage [2008/02/24(日) 16:08:01 ID:OZdK2Ezs] 668は逆にわかりやすいと思うが・・・なぜ分からぬ
679 名前:login:Penguin mailto:sage [2008/02/24(日) 16:57:30 ID:M1aIs9jI] >>659 slねぇ・・・Vine 3.2だとmakeしてもエラーが出てmake出来ないんだけど・・・? apt-get install build-essential は入ってる環境です。
680 名前:login:Penguin mailto:sage [2008/02/24(日) 21:43:32 ID:X4+soAGj] >>679 libncurses.soのことか?
681 名前:login:Penguin mailto:sage [2008/02/24(日) 22:41:47 ID:WU8Eis2Q] >>673 cd に -P とかオプションつけると機能しなくなるぞ。 cd() { builtin cd "$@" && ls; }
682 名前:login:Penguin mailto:sage [2008/02/24(日) 22:44:30 ID:CzUoXlF2] >>673 ,>>681 それしばらく使ってみるとわかると思うけど、 そのままではナイーブすぎて少し不便だよ。 zshで同じようなことやってるけど、次の点は考慮した方がいいです。 ・サブシェルで実行されたときにはlsしない ・行数が多すぎるときは適当な長さで切り、省略した旨を表示
683 名前:login:Penguin mailto:sage [2008/02/25(月) 12:48:54 ID:fTf5K0mT] 同一内容のファイルを調べるシェルスクリプトなんだけど、過去にここかUNIX板の方で出てたっぽい。 結局やらず仕舞いだったようだし、どうせならシェルスクリプトの勉強がてらやってみようとおもった。 作りたい理想は以下のとおり ・コマンドラインでオプション指定を行い、検索ディレクトリとサブディレクトリへの再帰検索をするかどうか、あとファイルサイズ閾値を指定できる ・走査しているディレクトリにあるファイルパス&ファイルサイズのペアをリストとして吐く ・ファイルサイズ閾値未満で、ファイルサイズが一致したものに対してmd5sumを実行し、両方が同一のハッシュを吐いた場合、表示する。 ・ファイルサイズ閾値を設定する理由はmd5sumが時間がかかりそうだから。閾値以上のサイズ一致ファイルはmd5sumすることなく表示する。
684 名前:login:Penguin mailto:sage [2008/02/25(月) 12:52:01 ID:fTf5K0mT] ちなみにサブディレクトリの再帰検索をせず、指定したディレクトリの全てのファイルのハッシュ値を比較して表示するだけなら #!/bin/sh md5sum $1/* | uniq -D --check-chars=32 | sed 's/^[0-9a-f]* \*//g' 上のだけで済むかな。標準エラーがうざいけど・・・ まずはディレクトリの再帰検索について質問したいところです。
685 名前:login:Penguin mailto:sage [2008/02/25(月) 12:55:37 ID:fTf5K0mT] あ、uniqの間にsortを入れてあげるとより親切か うちの場合はwgetで自動保存したファイルの整理だから、ファイル名が必然的に「DLファイル名+.連番」だから気にならないけど まったく違うファイル名かつ内容は同一ってときに、ハッシュ値でsortしてあげていた方がいいよね そう考えたらsedでハッシュ値をわざわざ消す必要もないか・・・ md5sum $1/* | sort | uniq -D --check-chars=32
686 名前:login:Penguin mailto:sage [2008/02/25(月) 12:57:54 ID:fTf5K0mT] 再帰検索はこの場合、find $1でファイルリストを列挙してからreadで"ls->ファイルサイズ取得"やら"md5sum"やらした方がいいのかな?
687 名前:login:Penguin mailto:sage [2008/02/25(月) 13:38:12 ID:fTf5K0mT] 不恰好だけどサブディレクトリまで調べて、全てのファイルにmd5sumして表示するのはこんな具合か・・・ #!/bin/sh TMPFILE="filelist" touch $TMPFILE find $1 | while read FILENAME; do if [ -f "$FILENAME" ]; then md5sum "$FILENAME" >> $TMPFILE fi done sort < $TMPFILE | uniq -D --check-chars=32 rm $TMPFILE もうちょっとスマートにならないかなあ・・・ あとユニークなサイズのファイルはmd5sumさせたくないなあ
688 名前:login:Penguin mailto:sage [2008/02/25(月) 13:47:58 ID:pu40lUxS] 書いてみた。 #!/bin/sh # finddup.sh -- find . | finddup.sh while read -r FILENAME do [ -f "$FILENAME" ] && printf "%14d:%s\n" `stat -c %s "$FILENAME"` "$FILENAME" done | sort | uniq -D -w14 | cut -b 16- | xargs md5sum | sort | uniq -D -w32
689 名前:login:Penguin mailto:sage [2008/02/25(月) 13:53:38 ID:pu40lUxS] uniq -f のほうが良さそうだね
690 名前:login:Penguin mailto:sage [2008/02/25(月) 13:57:12 ID:ATO0A7OZ] >>687 find . -type f -print0 | xargs -0 md5sum | sort | uniq -D -w32
691 名前:login:Penguin mailto:sage [2008/02/25(月) 14:17:36 ID:fTf5K0mT] >>688 ありがとう! あ、ただファイルやディレクトリ名にスペースが入るとmd5sumにしっかり渡せないみたいです bash on cygwin環境だとWindowsの「コピー (2) 〜 hoge.txt」という名前が恨めしい >>690 出力結果同じだΣすげえ ちょっとman読んでこよう・・・
692 名前:login:Penguin mailto:sage [2008/02/25(月) 14:23:38 ID:pu40lUxS] xargs --delimiter " " md5sum でどうかな。ちゃんとテストしなきゃだめだね まあ改行文字を含むファイルがあるとだめなんだけど、面倒だから他の言語でやらせたほうがいい
693 名前:login:Penguin mailto:sage [2008/02/25(月) 14:26:43 ID:ATO0A7OZ] >>692 >>690
694 名前:login:Penguin mailto:sage [2008/02/25(月) 14:27:32 ID:pu40lUxS] >>693 全部のファイルにmd5sumかけたら遅いだろ
695 名前:login:Penguin mailto:sage [2008/02/25(月) 14:31:42 ID:fTf5K0mT] あ、>>688 のxargs md5sumを>>690 のようにxargs -0 md5sumにすればOKなのかな
696 名前:login:Penguin mailto:sage [2008/02/25(月) 14:38:34 ID:ATO0A7OZ] >>695 んで、printf 側でも \n じゃなく \0 を使うようにする。
697 名前:login:Penguin mailto:sage [2008/02/25(月) 14:39:51 ID:pu40lUxS] uniqとcutはどうするよ
698 名前:login:Penguin mailto:sage [2008/02/25(月) 14:43:11 ID:fTf5K0mT] printfで囲ってやればイケました(`・ω・´) #!/bin/sh # finddup.sh -- ./finddup.sh target-path find $1 | while read -r FILENAME do [ -f "$FILENAME" ] && printf "%14d:\"%s\"\n" `stat -c %s "$FILENAME"` "$FILENAME" done | sort | uniq -D -w14 | cut -b 16- | xargs md5sum | sort | uniq -D -w32
699 名前:login:Penguin mailto:sage [2008/02/25(月) 15:21:01 ID:zYqxhFYE] 久々にまともな流れだな
700 名前:login:Penguin mailto:sage [2008/02/25(月) 16:57:52 ID:fTf5K0mT] ついでに以下のような動きが出来ないか色々試してみています。 どうも二進も三進も行かない $ ./findup.sh ~/pic/jun.2chan.net/ 2件の一致ファイル:8f7c1e2adb45adbfdb4d86adb1b9e894-------------------------- ~/jun.2chan.net/b/src/1192805081129.jpg ~/jun.2chan.net/b/src/1192805081141.jpg ------------------------------------------------------------------------------- ~/jun.2chan.net/b/src/1192805081129.jpgを削除しますか?[y/N/a] ~/jun.2chan.net/b/src/1192805081141.jpgを削除しますか?[y/N/a] y ~/jun.2chan.net/b/src/1192805081141.jpgを削除しました。 3件の一致ファイル:6fc4bdc4bc3bb06882bc98d9cbeb60c3-------------------------- ~/jun.2chan.net/b/src/1192800164913.jpg ~/jun.2chan.net/b/src/1194189136460.jpg ~/jun.2chan.net/b/src/1194189137115.jpg ------------------------------------------------------------------------------- ~/jun.2chan.net/b/src/1192800164913.jpgを削除しますか?[y/N/a] y ~/jun.2chan.net/b/src/1192800164913.jpgを削除しました。 ~/jun.2chan.net/b/src/1194189136460.jpgを削除しますか?[y/N/a] y ~/jun.2chan.net/b/src/1194189136460.jpgを削除しました。 ↑同一として列挙されたパスの残りが1になると削除せず次へ
701 名前:login:Penguin mailto:sage [2008/02/25(月) 17:00:46 ID:ATO0A7OZ] >>700 そこまで行くとシェルスクリプトには荷が重いんじゃないか?
702 名前:login:Penguin mailto:sage [2008/02/25(月) 17:10:48 ID:fTf5K0mT] >>701 以下の点でハードルがあがってるみたいですね ・一致したファイルのグループ分け ・ファイルを一つだけ残して削除した場合、残りの1ファイルは削除しない 列挙した全ファイルに対して、質問→削除というのは簡単にいけそうな感じ。 自分の知識だけで無理と判断して投げるのはアレだと思ったんだけど、やっぱ難しいかなあ
703 名前:login:Penguin mailto:sage [2008/02/25(月) 18:09:02 ID:pu40lUxS] #!/bin/bash # askdelete.sh -- find . | finddup.sh | askdelete.sh # よくテストされてませんので注意 TMPF=`mktemp /tmp/askdelete.XXXXXX` trap 'rm $TMPF' 0 CURHASH= COUNT=0 (cat; echo DUMMYHASH /dev/null) | while read -r HASH FILENAME; do if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then echo "------------------------------" echo "$COUNT 件の一致ファイル:$CURHASH" tail -n $COUNT $TMPF | cut -b 33- echo "------------------------------" tail -n $COUNT $TMPF | while read -r HASH FILENAME; do [ $COUNT -eq 1 ] && break echo -n "$FILENAME を削除しますか? [yN] " while read ANSWER do case "$ANSWER" in [yY]) echo rm "$FILENAME" COUNT=`expr $COUNT - 1` ;; esac done < <(head -1 /dev/tty) done COUNT=0 fi echo $HASH $FILENAME >>$TMPF CURHASH=$HASH COUNT=`expr $COUNT + 1` done
704 名前:login:Penguin mailto:sage [2008/02/25(月) 18:12:29 ID:pu40lUxS] done < <(head -1 /dev/tty) とか、絶対おかしいよこれ。 違う言語で書き直したほうがいい。
705 名前:login:Penguin mailto:sage [2008/02/25(月) 18:17:46 ID:fTf5K0mT] おおすげええΣ ちょっとテストしてみます!
706 名前:login:Penguin mailto:sage [2008/02/25(月) 19:20:15 ID:pu40lUxS] #!/bin/sh # askdelete.sh -- find . | finddup.sh | askdelete.sh TMPF=`mktemp /tmp/askdelete.XXXXXX` trap 'rm -f $TMPF' 0 1 2 3 15 CURHASH= COUNT=0 (cat; echo DUMMYHASH /dev/null) | while read -r HASH FILENAME; do if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then echo "------------------------------" echo "$COUNT 件の一致ファイル:$CURHASH" tail -n $COUNT $TMPF echo "------------------------------" tail -n $COUNT $TMPF | while read -r FILENAME; do [ $COUNT -eq 1 ] && break echo -n "$FILENAME を削除しますか? [yN] " while read ANSWER; do case "$ANSWER" in [yY]) echo rm "$FILENAME" COUNT=`expr $COUNT - 1` ;; esac break done < /dev/tty done COUNT=0 fi echo $FILENAME >>$TMPF CURHASH=$HASH COUNT=`expr $COUNT + 1` done すこしよくなった 参考になる www.nurs.or.jp/~asada/FAQ/UNIX/section3.8.html
707 名前:login:Penguin mailto:sage [2008/02/25(月) 20:58:36 ID:NDOa2UbC] 理想的な流れだ。
708 名前:login:Penguin mailto:sage [2008/02/26(火) 01:26:57 ID:Knz7qJ2h] >>706 サブシェルをわざわざ使う必要は無いのでは? --- (cat; echo DUMMYHASH /dev/null) | +++ { cat; echo DUMMYHASH /dev/null; } |
709 名前:login:Penguin mailto:sage [2008/02/26(火) 01:31:17 ID:V2S90oTo] こんなのじゃ駄目? find . -type f -print | xargs md5sum | sort | while read i do set -- $i test -e .$1 && rm -i $2 touch .$1 done 削除して残りが1つなら消さずに次、ということは最初の1つは 無条件で残して、2つ目以降についてのみ rm -i で削除確認すれば いいんだよね? 記憶用に .<md5sum> なマーカ作ってるけど、ここは md5sum な ダミー環境変数の方がいいかも。
710 名前:login:Penguin mailto:sage [2008/02/26(火) 08:30:35 ID:V4Ca66lJ] >>709 全ファイルにmd5sumしたら遅くならない?
711 名前:login:Penguin mailto:sage [2008/02/26(火) 08:46:21 ID:M2OUW+0j] >>708 パイプを使うと結局はサブシェルが起動されるんだから () のほうがわかりやすいと思うよ
712 名前:login:Penguin mailto:sage [2008/02/26(火) 09:53:07 ID:jk2VB7eG] >>710 どうせシェルスクリプトなんて使い捨てなんだし 多少遅くてもいいんじゃない? 実行時間の長さより 思いついたことをちゃちゃっと実行できる手軽さが大事でしょ。
713 名前:login:Penguin mailto:sage [2008/02/26(火) 10:56:04 ID:V4Ca66lJ] >>712 もっともな意見だと思うが、肝心なことを棚に上げてるな シェルスクリプトの本質は処理を効率化するための機能なんだから、 手軽に加えて「より早くスマートに処理」できる方がいいだろうよ どうせ使い捨てとか言い出したら、いつまで経っても遅くて低機能なスクリプトしか書けないぜ? まあせっかくいい方向で流れてるから、俺も最適化してみるか。
714 名前:login:Penguin mailto:sage [2008/02/26(火) 15:09:02 ID:KrvpwwSS] 手作業で30分かかる作業を、わずかワンライン5秒で済ます。 どうよ、この快感、すごいよ、俺!! ただしスクリブト書きに3時間かかるけどなっ!!、 みたいな・・・・
715 名前:login:Penguin mailto:sage [2008/02/26(火) 15:18:25 ID:jk2VB7eG] 5分で書いて実行時間3分にできればそれでおkだよな。 その作業を200回繰り返さなきゃいけないなら 3時間かけて書いて5秒に短縮してもいいけど、 そういうのはシェルじゃなくて別な言語を使った方がいいと思う。
716 名前:login:Penguin mailto:sage [2008/02/26(火) 16:04:42 ID:V4Ca66lJ] >>714 良いスクリプトを早く書けるスキルを養うといった考えはないのかよw まぁ価値観が違うなら仕方ないが >>715 言いたいことは分かるし仕事では俺も同じスタンスだ。モトが取れない作業をするのはアホだと思う。 さらに>>1 にあるようにPerlやPythonを使ってもいいと書いてあるように、別にシェルスクリプトに固執はしてないさ。 ただID:fTf5K0mTみたいに質問を丸投げせずに分かってないながらも自分で試してみている奴も居るんだから 「どうせ使い捨て」や「パンがなければケーキを」じゃなくて、しっかりした見本を見せてやろうぜw・・・と思ったんだ。 勝手に限界を作っちゃダメさ・・・!
717 名前:login:Penguin mailto:sage [2008/02/26(火) 17:08:11 ID:KrvpwwSS] 頑張るところが・・・まっいっか。人それぞれだな。
718 名前:login:Penguin mailto:sage [2008/02/26(火) 17:30:17 ID:DxWnmOPN] >>717 茶化すだけならWindowsに切り替えてフリーソフトスレにでも行け。 同一ファイル発見ソフトなんていくつもあるから。 自分で作ろうと思わん奴はウザイだけだ。
719 名前:login:Penguin mailto:sage [2008/02/26(火) 22:37:31 ID:ecwr7n8r] Windowsに切り替えて同一ファイル発見ソフトを探すってのもこれまた手間だよな
720 名前:login:Penguin mailto:sage [2008/02/27(水) 00:57:44 ID:k4ecn/gW] ああそういう意味か。 Linuxならawkでもperlでもpythonでもgccでも大概入ってんだろうになんで >Windowsに切り替えてフリーソフトスレにでも行け なのかマジで理解できなかった。 なるほどな、そういう考え方もあるか。これは考えが及ばなかったな。 まぁうちext3だしなぁ。
721 名前:login:Penguin mailto:sage [2008/02/27(水) 02:09:44 ID:5Pe1iZtE] >>711 サブシェル一個より分かりやすさを重視、ってのも分かるが プロセスを fork するコストはバカにできないぞ。 たった 10 回でもこれだけ差が出る。 $ time for i in 0 1 2 3 4 5 6 7 8 9 ; do { :; } ; done real 0m0.001s user 0m0.010s sys 0m0.000s $ time for i in 0 1 2 3 4 5 6 7 8 9 ; do ( :; ) ; done real 0m0.221s user 0m0.140s sys 0m0.140s 今回のはともかく、ループの中で無駄なサブシェル起こすと かなり処理速度に効いてくるから、「より早くスマートに処理」を 目指すなら気にした方がいいと思うよ。
722 名前:login:Penguin mailto:sage [2008/02/27(水) 12:04:07 ID:5xPFitgJ] >>721 そうじゃなくて、パイプではサブシェルが起動されるでしょう? $ { FOO=foo; echo $FOO; } | cat foo $ echo $FOO $
723 名前:login:Penguin mailto:sage [2008/02/27(水) 23:04:12 ID:6K2aGQ5h] >>722 popenってfork & execvじゃなかったっけ?
724 名前:login:Penguin [2008/02/28(木) 01:04:44 ID:2c894vLr] $cat a001 abc $cat a002 def $cat a003 ghi という内容の連番ファイルがあるときに、 a001,a002,a003ファイルそれぞれの先頭に 自身のファイル名を追記していくにはどのようにすればいいでしょうか? $cat a001 a001 abc $cat a002 a002 def $cat a003 a003 ghi
725 名前:login:Penguin mailto:sage [2008/02/28(木) 01:27:48 ID:k7I0oIXn] for a in *; do echo $a > temp cat $a >> temp mv temp $a done
726 名前:login:Penguin mailto:sage [2008/02/28(木) 01:53:39 ID:2c894vLr] >>725 できましたありがとうございます!!
727 名前:login:Penguin mailto:sage [2008/02/28(木) 11:40:05 ID:xnWdeCI1] csvの編集をしているのですがカンマを含むデータがある場合に特定の列を削除するいい方法はないでしょうか? 例: 編集前) aaa,bbb,"ccc,ddd","eee",ff 編集後) aaa,"ccc,ddd",ff カンマを含むデータは必ずダブルクォーテーションで囲まれているのですが どの列にカンマを含むデータが存在するかは不明です。 192の方法だと特定の列は出せるのですが、複数列を表示することができないので。。。
728 名前:login:Penguin mailto:sage [2008/02/28(木) 11:45:53 ID:sfXUxgeO] >>727 シェルスクリプトでがんばるより↓あたり使ったら? blog.livedoor.jp/dankogai/archives/50765677.html
729 名前:login:Penguin mailto:sage [2008/02/28(木) 12:17:28 ID:DWKM9TyE] >>727 無駄にがんばってみた。PerlとかSQLiteとか使った方が絶対いい。 #!/usr/bin/awk -f BEGIN {OFS=",";} function csplit(s,a,c,f,i,j,k){delete a;for(i=j=1;;i++){ c=substr(s,i,1);if(c==""){a[k++]=substr(s,j,i-j);break;} else if(c=="\""){if(f>0){if("\""==substr(s,i+1,1))i++; else f=0;}else f=1;}else if(c==","&&f==0){a[k++]=substr(s, j,i-j);j=i+1;}}return k;} {n=csplit($0,array);print array[0],array[2],array[4];}
730 名前:login:Penguin mailto:sage [2008/02/28(木) 20:37:03 ID:VzdvBwjj] 吐きそうだ。 字下げを知らないやつがまだこの世にいたのか。
731 名前:login:Penguin mailto:sage [2008/02/28(木) 20:53:53 ID:k7I0oIXn] >>730 じゃあお手本をちょっと見せてくれ
732 名前:login:Penguin mailto:sage [2008/02/28(木) 22:39:21 ID:VzdvBwjj] 死ぬまで>>729 記法で頑張りゃいいんじゃね? それも個性だ。
733 名前:login:Penguin mailto:sage [2008/02/28(木) 22:40:23 ID:gxJgMbC8] 敗北宣言はええ
734 名前:login:Penguin mailto:sage [2008/02/29(金) 00:47:32 ID:1XKkNNaQ] 2ch に貼る時気をつけないと空白スペース詰められちゃうよね
735 名前:login:Penguin mailto:sage [2008/02/29(金) 01:30:01 ID:Pgw8LnNi] そこで&nbsp;
736 名前:login:Penguin mailto:sage [2008/02/29(金) 01:41:57 ID:bnE90VmD] 行末にタブがある行を検索しようと egrep '\t$' としてもマッチしません。awkだと awk '/\t$/' でマッチするのですが、grepだとどう書けばいいのでしょうか?
737 名前:login:Penguin mailto:sage [2008/02/29(金) 01:59:08 ID:Pf9U77bc] 元々、\tなどのメタキャラクタはgrepにもawkにもなかった。 GNU awkがPerlの影響を受けて拡張しただけ。
738 名前:login:Penguin mailto:sage [2008/02/29(金) 02:10:07 ID:bnE90VmD] そうなのかー・・・ちょっとしょぼーん。拡張されてもいい感じなんだけどね。 grep sed awk ぐらい正規表現は統一して欲しかったorz
739 名前:login:Penguin mailto:sage [2008/02/29(金) 08:36:03 ID:qSBWA6nK] タブを¥tと書きたかった理由が シェルからコマンドラインにタブを打とうとして補完機能に取られるから、 であれば、Ctrl-V TAB でたぶんOK。
740 名前:login:Penguin mailto:sage [2008/02/29(金) 09:40:38 ID:HrPH8ECW] くだ質からこちらに誘導されたので、こちらで質問させて下さい。 ド素人質問で悪いのですが $ cat text1.txt 1 2 3 $ cat text2.txt 3 4 5 という二つのファイルがあるとして、それを1行ずつ割り算したいのです。 結果としてこういう形になれば満足です。 $ cat result.txt 0.33 0.50 0.60 どのように記述すれば良いのでしょうか、シェルは普段bashを使っていますが、 もちろんshでも構いません。宜しくお願いします。
741 名前:login:Penguin mailto:sage [2008/02/29(金) 09:42:18 ID:/PNY/URb] >>740 ぱっと思いついたもの。 ( echo 'scale=2' ; paste -d/ text1.txt text2.txt ) | bc
742 名前:login:Penguin mailto:sage [2008/02/29(金) 09:48:46 ID:HrPH8ECW] >>741 早速ありがとう御座います。こんな結果になりました。 .33 .50 .05 (standard_in) 5: parse error 53 4 5 pasteってこういうときにも使えるんですね。 parse errorとかbcとか知らないものも調べてみます。
743 名前:740 mailto:sage [2008/02/29(金) 09:58:48 ID:HrPH8ECW] >>741 すいませんでした、エラーは自分の不備によるものでした。 きちんと結果表示されたので満足しています。ありがとう御座いました。
744 名前:login:Penguin mailto:sage [2008/02/29(金) 10:03:24 ID:Mcdovrgg] スクリプトで2台のDebian間を rcp でコピーしようと思っています。 expect を使って、スクリプトを作成し、それがうまく動作するところまでは こぎつけたのですけれど、cronに登録すると動かなくなってしまいます。。。。 どうすれば解決するでしょうか?アドバイスをいただけると嬉しいです。 ちなみにスクリプトは ==========================- #!/bin/sh expect -c " set timeout 20 spawn rcp -r {コピー元} {コピー先} expect sword:\ ; send \"{パスワード}\r\" " ============================== こんな感じです。 ご教授のほどよろしくお願いします。
745 名前:login:Penguin mailto:sage [2008/02/29(金) 10:04:13 ID:/PNY/URb] >>744 カレントディレクトリがどこになってるのか、とか 権限に問題はないか、とか。 つーか rsync あたり使った方が楽じゃない?
746 名前:login:Penguin mailto:sage [2008/02/29(金) 17:16:24 ID:HrPH8ECW] シェルスクリプトでは無いのかもしれませんが、今日2度目の質問をさせて下さい。。 スレ初心者なので、スレ違いだったらすいません。 LPIC試験の勉強のために初めてjoinコマンドを使うのですが、うまくいかず困っています。 1.txtと2.txtに、1〜999999の中から任意に500個程度選び出した数字を それぞれフィールド1に、その他データをフィールド2以降に並べた テキストファイル(↓こんな感じにソートしたのものです) $ cat 1.txt $ cat 2.txt 50 aiu 50 abc 1111 80 eoka 140 def 2222 ↓ ↓ 999999 wawon 531243 xyz 3333 があるのですが、フィールド1に同じ数字が書かれた行を joinで繋げたいんです。色んなサイトやLPICの勉強本を参考にしたのですが $ join -1 1 -2 1 1.txt 2.txt $ join -j 1 1.txt 2.txt 上の2つでは、300個くらいHITするはずなのですが、数個しか出てきません。 全く同じ行に同じ数字がフィールド1に入っているものだけが出力されているようです。 行数が数行しかないファイルではきちんと違う行でも結合してくれるのですが、 行数が多いとjoinでは無理ってことはありますか? 500行くらい処理してくれるものだと思ったんですが・・・泣。 シェルスクリプトでうまくいくのであればヒントを下さい、シェルはbashです。
747 名前:login:Penguin mailto:sage [2008/02/29(金) 17:21:26 ID:/PNY/URb] >>746 いまいちやりたいことがわからん。 5行くらいのファイルで例示してみてくれ。 しかし join なんて使ったことないな。 そんなん知らなくても実務ではまったく困らん。 perl かなんかで書く勉強でもした方が役に立つよ。
748 名前:login:Penguin mailto:sage [2008/02/29(金) 17:52:51 ID:HrPH8ECW] >>747 初めて学ぶスクリプト言語をシェルスクリプトにしようと決めたところでして、 perlとかは全く知らないんです・・・。ですが実務ではなく趣味なので楽しんでいます。 それと説明が下手ですいません(泣)再度説明させて下さい。 $ cat join1.txt 157 A B 160 C D 1291 I J 1373 K L $ cat join2.txt 157 C D 160 E F 1373 K L この2つのファイルをフィールド1個目でくっつけて $ join -j 1 join1.txt join2.txt 157 A B C D 160 C D E F 1373 K L K L にしたいんですが(上のファイルだとくっつきました)、各フィールド数が7個 各行数が500行程度、各ファイルサイズは30KBくらいになると、フィールド1個目の 数字が一緒でも、行が1個でもずれているとくっつかなくなり、行が同じものしか結合しなくなりました。 joinの精度が低いのが原因なのだとしたらお手上げなのですが、 何か他の原因は思いつきますでしょうか。perlとかSQLは全く無知なのでシェルで済ませたいんです。
749 名前:746 mailto:sage [2008/02/29(金) 18:07:44 ID:HrPH8ECW] 自己解決したわけではないのですが、やっぱり精度の問題みたいです・・・。 >>748 の join1.txt と seq 150 200 > seq1.txt でjoinコマンドを使ってみたら結合できましたが >>748 の join1.txt と seq 1 2000 > seq2.txt でjoinコマンドを使ってみたら1つも結合出来ませんでした。 何か他の工夫で切り抜けたいと思います・・・失礼しました。
750 名前:login:Penguin mailto:sage [2008/02/29(金) 21:29:21 ID:d0BiI2Kq] >FILE1 と FILE2 は実行前に join フィールドの昇順にソートしておかなければならない(数値順のソートはだめ)。 だとさ。
751 名前:login:Penguin mailto:sage [2008/03/01(土) 06:54:44 ID:+XEPxk54] 月に一度、メールログを調べたいのですが、 下記スクリプトを毎月1日朝に走らせています。 --- #!/bin/sh pre_month_days=`date -d '1 days ago' +%d` zcat /var/log/maillog.{1..$pre_month_days}.gz | 引き渡し先プログラム --- これをシェルで走らせると zcat: /var/log/maillog.{1..29}.gz: No such file or directory となります。 ですが、 #zcat /var/log/maillog.{1..29}.gz と手打ちすると、ズシャーっとログが表示されます、エラーも最後まで出ません。 変数展開されていないならまだしも、まったく原因がわかりません。 どういう理由で「No such file or directory」が出るのでしょうか?
752 名前:login:Penguin mailto:sage [2008/03/01(土) 07:04:36 ID:5EZ+WSHA] 変数が入ってると{}って展開されないんじゃね?
753 名前:login:Penguin mailto:sage [2008/03/01(土) 10:33:04 ID:t3ZBWfKh] x=29 echo {1..$x} してみようぜ。
754 名前:751 mailto:sage [2008/03/01(土) 17:46:18 ID:IgLZSOLf] >>752-753 {1..29} ・・・ってことは、{1..29}そのものを探す=「No such file or directory」 ってことでしょうか? ということは、pre_month_daysの文だけfor文で回して、 $temp_textにためていってから、解析プログラムに引き渡すと今思ったのですが、 この$temp_textというのは、シェルスクリプトが終了したときには、 消えてなくなるのでしょうか?どこかに残っているものなのでしょうか? $temp_textだと、120万行ぐらいあるので、どこかに残っていれば圧迫しかねませんし・・・。
755 名前:751 mailto:sage [2008/03/01(土) 19:12:07 ID:IgLZSOLf] す、すいません、 bashのfor文ってわけわかりません、( )とか{ }とか使うと思っていたのですが・・・。 zcat /var/log/maillog.$x.gz >> $temp を繰り返して、 引き渡しプログラム $tempとしたいのですが、 for文(他のやり方もある?)をどう使えばいいのでしょうか?
756 名前:login:Penguin mailto:sage [2008/03/01(土) 19:37:33 ID:t3ZBWfKh] for文はCみたく配列を添え字でループするのと違って、 並べた要素1つ1つに対してループするというもの。 for x in 1 2 3 4 5; do echo $x done とかな。 1から先月末日までの日の並びを作るために、Linuxならおそらくseqが使える。 # BSDだとjot for $x in `seq $pre_month_days`; do zcat ...$x... done とか。
757 名前:login:Penguin mailto:sage [2008/03/01(土) 20:11:24 ID:quX+uZMv] bash なら for (( i = 0; i < 10; i++ )); do echo $i done みたいな C っぽい for 文も使える。
758 名前:751 mailto:sage [2008/03/01(土) 20:32:55 ID:IgLZSOLf] >>756-757 seqを使ってもエラーが出るので、 Cっぽくやってみました。 aaa.1.txt aaa.2.txt aaa.3.txt を用意して、 ------------------ #!/bin/bash x=3 temp="" for (( i=1 ; i < $x+1; i++ )); do cat aaa.$i.txt >> $temp done cat $temp ------------------- ./test2.sh: line 5: $temp: ambiguous redirect ./test2.sh: line 5: $temp: ambiguous redirect ./test2.sh: line 5: $temp: ambiguous redirect マズー(;´Д`) am・big・u・ous[ mbjus ] [形] 1 2通り(以上)の解釈を許す 2 (正体の)あいまいな;紛らわしい;はっきりしない, ぼんやりした, もうろうとした, おぼろげな
759 名前:login:Penguin mailto:sage [2008/03/01(土) 20:49:48 ID:pGgAUYn5] temp="" 書き込み先がないじゃんか。 temp=nulpo.txt とか書き込み先がないと。
760 名前:759 mailto:sage [2008/03/01(土) 21:51:32 ID:IgLZSOLf] い、いけました。 1ヶ月のメールログ1.4GBを食わせることができました。 ありがとうございます。
761 名前:login:Penguin mailto:sage [2008/03/01(土) 22:39:09 ID:pGgAUYn5] >>760 最初の>751をよく見てなかったんだけど、maillog.*がそんなに多くない(毎月かならず1〜29になっている、てので)なら for file in `ls /var/log/maillog.*` do zcat $file | 処理プログラム done でいいのでは。 それと焦って名前欄間違えないように〜w
762 名前:760 mailto:sage [2008/03/01(土) 23:08:45 ID:IgLZSOLf] あぅ、すいません。 logrotateはdailyの120でcompressなんです。 で、月次解析なんで、 その日の前日の「日にち」を取って、 zcatしなくちゃならなかったんです。 でも、これで月次の解析ができます〜
763 名前:login:Penguin mailto:sage [2008/03/02(日) 03:30:36 ID:b0TlSvfI] いい流れた
764 名前:login:Penguin mailto:sage [2008/03/02(日) 22:17:28 ID:eyDRtewQ] >>760 ファイルに落とさない方法もあるぞ 引き渡し先がワンパス処理で無い場合は失敗する可能性 があるのでおすすめ出来ないが... #!/bin/sh pre_month_days=`date -d '1 days ago' +%d` ( for i in `seq 1 $pre_month_days` ; do printf "/var/log/maillog.${i} " done ) | xargs echo zcat | 引き渡しプログラム exit $? ##
765 名前:login:Penguin mailto:sage [2008/03/03(月) 09:55:39 ID:4ARrqAXS] 括弧はいらないね
766 名前:login:Penguin mailto:sage [2008/03/03(月) 13:44:09 ID:WtSCj+5U] >>751 eval zcat /var/log/maillog.{1..$pre_month_days}.gz | 引き渡し先プログラム
767 名前:login:Penguin mailto:sage [2008/03/03(月) 23:36:12 ID:5ghxiELA] んー 簡単なApacheログ解析&集計用スクリプト組みたいんだけどシェルスクリプトだとパフォーマンス悪いかな? RubyやPythonは使えないんで、bash系シェルスクリプトかPerlでやってみたいんですが ちなみにログフォーマットはこんな感じ mxxxxxx.dynamic.ppp.asahi-net.or.jp - - [27/Feb/2008:15:46:04 +0900] "GET / HTTP/1.1" 200 101323 "hoge.piyo/ " "Opera/9.25 (X11; Linux i686; U; ja)" 1リクエストに対して1行記録され、日付毎にファイルがある。(ファイル名の例:access_log_20080227) 465日分で容量2.5GB超とちょっと多いです。 やりたいことは項目別のランキングをテキスト出力だから、スクリプト自体は簡単そう
768 名前:login:Penguin mailto:sage [2008/03/03(月) 23:43:14 ID:Zrc2Vdg0] それはanalogとかでできないものでしょうか(´-`)
769 名前:login:Penguin mailto:sage [2008/03/03(月) 23:46:01 ID:5ghxiELA] >>768 実はそんな気がしてた ありがとう('`)〜♪
770 名前:login:Penguin mailto:sage [2008/03/04(火) 00:34:34 ID:61UoHuE3] ウワー早い 2分ちょいでこれだけ解析できるのかー ああでも肝心なRefererランキングが出てないわ Analogスレは4ヶ月近く誰も居ないみたいだしドウシタモンダカー
771 名前:login:Penguin [2008/03/04(火) 09:48:48 ID:kUaxbjJj] Bashを使ってシェルスクリプトの練習をしています ファイルに特定の文字列が記載されていたら処理を分岐させるというシェルを書きたいと思っているのですがなかなか上手くいってくれません 何かいい方法がありましたら教えていただけないでしょうか やりたい事はファイル内にHTMLという文字列が入っていたらAの処理 入っていなかったらデフォルトの処理をしたいと考えたので 下記のようにしてみました TMP=`cat $YEAR$MONTH$DAY.csv |grep HTML`; echo $TMP case "$TMP" in HTML)echo "HTML file" ;; *) echo "##################" esac
772 名前:login:Penguin mailto:sage [2008/03/04(火) 09:54:01 ID:oWYbuV9h] >>771 if grep HTML "$YEAR$MONTH$DAY.csv" >/dev/null; then echo "HTML file" else echo "##################" fi
773 名前:login:Penguin mailto:sage [2008/03/04(火) 14:33:52 ID:kUaxbjJj] >>772 ありがとうございます 教えていただいた通りにやったら問題なくできました なぜcat|grepのときは上手くできなくて grepの時は問題なくできるのかがちょっと分からないのですが いろいろ調べてみようと思います
774 名前:login:Penguin mailto:sage [2008/03/04(火) 21:04:44 ID:rsD9V5Zj] HTML) を *HTML*) としてみようぜ。
775 名前:login:Penguin mailto:sage [2008/03/04(火) 23:06:20 ID:VrfR3qUe] >>774 やだよ
776 名前:login:Penguin mailto:sage [2008/03/05(水) 00:05:43 ID:EV9xTscM] grep -q を使わないのはポータビリティー重視だから?
777 名前:かね ◆CHAS.7AvVo mailto:sage [2008/03/05(水) 10:22:08 ID:JQ4a1dor BE:411629928-2BP(158)] >>777 ゲット
778 名前:login:Penguin mailto:sage [2008/03/10(月) 18:08:47 ID:qsIz6iXz] 論文を書くときに使うグラフをTopazというソフトを用いて作成しております。 その結果、グラフがepsファイルとして作成されるのですが、Windowsにもってくるとフォント関係でエラーが生じてしまいます。 なのでLinuxでフォントをアウトライン化しようと思い「eps2eps」というコマンド(シェルスクリプト?)を用いて epsファイルのフォントをアウトライン化しました。 しかし、そうするとbounding boxがおかしくなってしまいます。 ですので元のepsをテキストエディタで開き、bounding boxの項目をコピペして対応しています。 それでようやく本題なんですがw 上のような作業を、複数のファイルに対して一括で行いたいのです。 for file in *.eps do eps2eps $file ${file%eps}2 done のようなシェルスクリプトを使えば一括でアウトライン化epsができると思うのですが さらに、インプットファイルをテキストエディタで開きbounding boxの項目をコピー アウトプットファイルにbounding boxの項目を貼り付け というような機能を持たせることはできるのでしょうか?
779 名前:login:Penguin mailto:sage [2008/03/10(月) 19:47:47 ID:PtxOKuxD] ed
780 名前:login:Penguin mailto:sage [2008/03/11(火) 02:26:04 ID:3Mwu+R1S] >>778 スクリプトに慣れた人ならすぐに作れる。
781 名前:login:Penguin mailto:sage [2008/03/12(水) 23:51:51 ID:wAPdko8t] >>780 ?
782 名前:login:Penguin mailto:sage [2008/03/13(木) 22:58:09 ID:A7XLS93G] >>781 !
783 名前:login:Penguin mailto:sage [2008/03/13(木) 23:17:56 ID:SoJCaJfU] ああ、無情
784 名前:login:Penguin mailto:sage [2008/03/14(金) 00:22:41 ID:XhBWUHl1] シログミガンバレ
785 名前:login:Penguin mailto:sage [2008/03/18(火) 03:16:13 ID:TPZ/j5Uw] basenameが第二引数を取ることを今知った。
786 名前:login:Penguin mailto:sage [2008/03/20(木) 22:15:42 ID:N/tKbDY7] echo hoge=1で代入、表示両方できる知った件
787 名前:login:Penguin mailto:sage [2008/03/21(金) 00:14:20 ID:jeNVffRp] >>786 $ echo hoge=1 hoge=1 $ echo x"$hoge"x xx bash 2.05b@debian ではできないぞ。 環境を教えてくれ。
788 名前:login:Penguin mailto:sage [2008/03/21(金) 01:11:50 ID:3ULYcj2H] そんなのできたら困る。
789 名前:login:Penguin [2008/03/21(金) 01:53:30 ID:Mk2nPfge] >>539 >>537 最近はGUIの環境もシェルと呼んだりするらしいしね. >ところで,シェルスクリプトをシェルと略す感覚が信じられない >.せめてスクリプトのほうを残すべきじゃないのか,意味的に… javascriptをjavaって呼ぶ奴おおいし、むきになんなよ ちっせーな、何度も何度も
790 名前:login:Penguin mailto:sage [2008/03/21(金) 03:00:16 ID:tzWxNirH] >>789 javascriptとjavaだって別物じゃねーか まったく別の意味にとられる表現は避けるべきだろ。
791 名前:login:Penguin mailto:sage [2008/03/21(金) 03:26:20 ID:yp4cACqr] javaの開発と言われて行ってみたら、javascriptの案件だった…… 経験者を求めていた筈なので確認をとったら速攻で別案件に回されたけど。 (だれがどこでまちがったのかはしらない。たぶん、えいぎょうのアレがマタやらかしたんだろうけど)
792 名前:login:Penguin mailto:sage [2008/03/21(金) 18:28:30 ID:dmCthI0s] >>789 無能丸出しだな。
793 名前:login:Penguin mailto:sage [2008/03/22(土) 00:13:19 ID:/5OR7tiw] そうだよね、文字の"あ"を"い"って発音してもいいじゃん?
794 名前:login:Penguin mailto:sage [2008/03/22(土) 06:15:29 ID:EkMxwp6R] >>792 頭の構造が粗雑なんだろうね。 しかし無能とは決めつけられないよ。土方としては有能かも知れないじゃないか。
795 名前:login:Penguin mailto:sage [2008/03/22(土) 13:14:51 ID:I+OQFn9y] >>794 井の中の蛙、大海を知らず。
796 名前:login:Penguin mailto:sage [2008/03/22(土) 14:00:07 ID:4xBJlBA7] javascriptをjavaと呼ぶ井戸の外の世界
797 名前:login:Penguin mailto:sage [2008/03/22(土) 14:23:40 ID:79XeAASw] もうすべて「あれ」と「あれ以外の何か」でいいんじゃね? 「この開発にはあれが必要だな」 「そうですね、あれも必要です」 「あれのほうはどうだ」 「あれはあれ以外のあれでやりましょう」 「あれはあれだったからな」 募集要件にはエスパー希望と書けば何も問題ない。
798 名前:login:Penguin mailto:sage [2008/03/22(土) 14:25:08 ID:ldkQa/0V] 残念なことにハードディスクドライブをハードと略すおっさんを結構見かけるのがリアル世の中なのねん。 javascriptをjavaと呼んじゃうおばちゃん、ねーちゃんだってざらにいるよ。 どっちかというと>>789 のほが常識的な気がす
799 名前:login:Penguin mailto:sage [2008/03/22(土) 15:16:06 ID:OrPubXKD] >>789 perlスクリプトをPerlと呼んだりPerlでやると言ったり awkスクリプトをawkと読んだりawkでやると言ったり それと同じでは
800 名前:login:Penguin mailto:sage [2008/03/22(土) 16:27:56 ID:5bvfNtQw] 省略したら同種の別の言葉になるかどうかだな。
801 名前:login:Penguin mailto:sage [2008/03/22(土) 16:38:49 ID:ldkQa/0V] 厳密なことをいえばさ、シェルって単体で言う場合はシェルスクリプトの略じゃないのよね。 (>>537 ,>>539 はこれにつっこんでいる) OSのカーネルに対する、(コマンド)インターフェイス外殻(カーネルの外層を覆う殻の概念)を 現在はCUI/GUIの別を問わずにシェルと呼んでる。このうちGUIの場合はグラフィカルシェルとか CUIの場合はコマンドラインインタプリタとか呼ぶのだけど、このコマンドラインインタプリタを Linuxを含めたUNIX系OSでは単にシェルと呼ぶ慣習がある。昔UNIXにはGUIなんて無かったらね、 シェルといったらコマンドラインインタプリタのことだ、ということに定着していたわけね。 いわゆるsh, bash, csh, tcshのshがシェルだ罠。 シェルスクリプトの略がシェルじゃなくて、シェルで動くスクリプトがシェルスクリプトなの。 順番が逆なのよ。 awk/perlもawk(言語)/perl(言語)のスクリプトがawk/perlスクリプトなのであって awk/perlスクリプトの略がawk/perlなんじゃないよ。 まぁどうでもいいけどな。 以上を踏まえてあえて言えば たしかにシェルとシェルスクリプトは別物だしjavaとjavascripは別物だし、 細かいこと言えばGUIだってグラフィカルシェルなのだ(>>539 )が あんま細かいことをいうとバカみたいだ。つーか狭量に見える。 というわけで>>789 のほが同意できる。聞き上手って言葉があるじゃない?
802 名前:login:Penguin mailto:sage [2008/03/22(土) 17:33:00 ID:/5OR7tiw] でだ、>>539 がシェルスクリプトをシェルと略さずにせめてスクリプトと略しゃ いいだけじゃねーかと建設的な提案をしたのに、他の軽量プログラミング言語 までもちだし、略した言葉を受け取った人間の能力の問題じゃね? となるこのスレの流れに、思わず小岩井ミルクコーヒーを噴いた。 >>791 の様に読解および対話能力が備わってないと、悲惨な状況のド真中に パラシュート降下させられる奴がわんさかでそうだ。単語の略し方の問題で。
803 名前:login:Penguin mailto:sage [2008/03/22(土) 18:27:12 ID:g5kThUF3] >たしかにシェルとシェルスクリプトは別物だしjavaとjavascripは別物だし、 >>800 の言う通り、 シェル・スクリプトをシェルと呼んでも文脈から意味は通じるが、 javascriptをjavaと呼んでしまうと別のものを指してしまう。 混同するな。
804 名前:login:Penguin mailto:sage [2008/03/22(土) 19:12:09 ID://sUM775] WikipediaをWiKiとかね。
805 名前:login:Penguin mailto:sage [2008/03/22(土) 19:20:26 ID:ldkQa/0V] では、世の間違いをどこまでも正していってくれ。 思い浮かべて欲しい世の人々は道の傍らでJavaとJavascriptの違いを 切々と説く君たちに聖者が来れり、天国は来れりと歓喜することであろう。 が、まぁ少なくとも営業の彼と経理の彼女、はす向かいの鈴木さんに 今後一切飲みに誘われなくなるのは間違いと思うけどね。
806 名前:login:Penguin mailto:sage [2008/03/22(土) 19:26:48 ID://sUM775] >>805 は啓蒙活動を自粛するようです。
807 名前:login:Penguin mailto:sage [2008/03/22(土) 19:39:22 ID:pZoAGsoS] モヒカン族と村人ですから
808 名前:login:Penguin mailto:sage [2008/03/22(土) 19:39:41 ID:d90KTFFK] >>805 さっさと氏ね
809 名前:login:Penguin mailto:sage [2008/03/22(土) 20:07:27 ID:/5OR7tiw] >>805 AとBは異なるという説明し、その異なりを無視して同一のもととして扱うと 余計なコストが発生するから、次からはきちんと区別してくれという依頼が 出来ない風土、もしくは、意思決定にかかわる情報を扱うやつが説明しても、 その異なりを理解できないなら、そんな会社つぶれるだろ常考。 また、痛いレスみてJavaとJavascriptも区別して話す新入りが入ってきたら、 それこそ大迷惑だ。 >>791 のえいぎょうのアレは赤っ恥ですめばいいけど。発注元からみると、 大丈夫かこの営業さんと思ったに違いない。 という燃料を補給してみた。
810 名前:login:Penguin mailto:sage [2008/03/22(土) 20:29:32 ID:ldkQa/0V] まぁ派遣は大変だよな。ガンガレ。
811 名前:login:Penguin mailto:sage [2008/03/22(土) 21:23:56 ID:I+OQFn9y] >>797 つまり春奈と偽春奈で仕事をすると。
812 名前:login:Penguin mailto:sage [2008/03/22(土) 21:25:26 ID:ldkQa/0V] >>810 だが、今見たら言い方が悪かった。なんだか煽っているようにもとれるかもな。 すまんかった。そういう意味じゃなくて、今時、派遣ぽい職場の人は技術職まで そんな感じになってきて大変だと思う。漏れにも似たような経験あるからさ、 マジ、ガンがって欲しいと思ってる。 言われたのと行った先で条件が違うなんてのはちょくちょくあって アホな会社にも言えなくて当人が泣きをみてしまうつーのは辛いよな。 やる気ならなんとかユニオンとかそっちに話をもってくしかないわけだが 自分の身を守るのが第一かと思うよ。 まぁここでそんなこと言っててもしょうがないわけで、そういう言い方になった。
813 名前:login:Penguin mailto:sage [2008/03/24(月) 00:53:04 ID:W0JgcRQd] 教えて先生。つーか、自分がやった時に苦労したんだけど、 プロな人はもっと簡単な方法を知ってるんじゃないかな的なお題。 ひょっとして歴代のスレで既出の可能性ありだけど許して。 ディレクトリに お宝画像(1).jpg お宝画像(2).jpg .... お宝画像(100072).jpg お宝画像(100073).jpg が入っている。ファイル名はutf8の日本語、連番はカッコ付きで 連番途中に欠番がある可能性がある。これらのファイルをすべて ero-pic000001.jpg ero-pic000002.jpg .... ero-pic100072.jpg ero-pic100073.jpg という風にリネームしたい。どうしたらいいでしょう?
814 名前:login:Penguin mailto:sage [2008/03/24(月) 01:03:25 ID:zratqhRJ] プログラミングの基礎を学べば余裕でできると思うよ
815 名前:login:Penguin mailto:sage [2008/03/24(月) 01:09:16 ID:1V6v3lmW] 実は漏れは結局Cでやったんだけどね。シェルで簡単にやるにはどうするの?
816 名前:login:Penguin mailto:sage [2008/03/24(月) 01:11:56 ID:BAIAfq4T] rename や mmv を使うかな。
817 名前:login:Penguin mailto:sage [2008/03/24(月) 01:16:04 ID:eiDHSNtl] perl版renameで rename '/\d+/ and $_=sprintf(q{ero-pic%06d.jpg}, $&);' お宝画像*.jpg とか?
818 名前:login:Penguin mailto:sage [2008/03/24(月) 01:23:02 ID:RkCnK2Rz] ls > file_list.txt して中身を mv "お宝画像(1).jpg" "ero-pic00001.jpg" とかに変えて sh file_list.txt するかな
819 名前:login:Penguin mailto:sage [2008/03/24(月) 02:17:54 ID:QVIn50Y1] >>816 mmvというのは? うちにはないみたいだけど。 >>817 perl版renameというのは普通のrenameとは違いますよね?多分。 >>818 基本的にはその方法を用いましたが、 > mv "お宝画像(1).jpg" "ero-pic00001.jpg" とかに変えて ここがエディタでも番号を取り出す文字列操作を伴うマクロかなにかを使う必要があるわけです。 10000行以上あるので手動では無理ですし。私はCでやりましたが。 やっぱそもそも結構めんどくさいことだったんですかね。 なんか簡単そうな感じはするんだけど。
820 名前:login:Penguin mailto:sage [2008/03/24(月) 02:39:44 ID:sKYr6YWg] Perl版renameといえばラクダ本に載っている正規表現でリネームパターンを 指定できるスクリプト(使い方は>>817 )のこと。
821 名前:login:Penguin mailto:sage [2008/03/24(月) 02:44:18 ID:xdVA6Pwk] >>820 導入するには?
822 名前:login:Penguin mailto:sage [2008/03/24(月) 02:50:59 ID:RkCnK2Rz] >>819 でも、正規表現使ったら5回くらいの置換でいけるから、 それでやっちゃうなぁ。俺だったら vi で :%s/.*\(.[0-9]\).*/ero-pic0000\1.jpg/gc :%s/.*\(.[0-9]{2}\).*/ero-pic000\1.jpg/gc みたいな感じで 自信ないけど
823 名前:login:Penguin mailto:sage [2008/03/24(月) 02:56:32 ID:NZTM56J5] >>822 > :%s/.*\(.[0-9]{2}\).*/ero-pic000\1.jpg/gc これダメっぽいような? あと「お宝動画」は例えばの例でどうかわかんないけど 日本語大丈夫かしら?
824 名前:login:Penguin mailto:sage [2008/03/24(月) 02:57:54 ID:BAIAfq4T] perl-rename のGTK版見付けた。 gprename しかしprel-renameみつからない・・・
825 名前:login:Penguin mailto:sage [2008/03/24(月) 03:00:27 ID:BAIAfq4T] って ubuntu のrenameはprenameだった。
826 名前:login:Penguin mailto:sage [2008/03/24(月) 03:07:10 ID:NZTM56J5] >>824 さんきゅ。これ? https://sourceforge.net/project/showfiles.php?group_id=40094&package_id=32230 あとひょっとしてPerl版renameって $ perl -e '{ rename "old-filename", "new-filename";}' みたいな話なのだろうか?(↑はちゃんと動くようだけど)
827 名前:login:Penguin mailto:sage [2008/03/24(月) 03:08:54 ID:eiDHSNtl] debianのperlのパッケージに標準で含まれてるのよ
828 名前:login:Penguin mailto:sage [2008/03/24(月) 03:17:40 ID:/I27eUR4] 今思いついたのだが、ひょっとしてスクリプトで #!/usr/bin/perl rename old-filename, new-filename; みたいな話とか?なるほどそれならいけそだけど。
829 名前:login:Penguin mailto:sage [2008/03/24(月) 03:20:03 ID:sKYr6YWg] Perl版renameはこんな感じのスクリプト $op = shift; foreach (@ARGV) { $was = $_; eval $op; die $@ if $@; rename($was, $_) unless $was eq $_; }
830 名前:login:Penguin mailto:sage [2008/03/24(月) 04:12:10 ID:dtyI9N0m] >>813 あえてシェルスクリプトで書くのならこんな感じかな。 #! /bin/bash for file in "$@" ; do num=${file#*(} num=$( printf '%06d' "${num%)*}" ) mv "$file" "ero-pic${num}.jpg" done bashism が嫌いなら sed に置き換えれば /bin/sh でも動くんじゃないかな
831 名前:login:Penguin mailto:sage [2008/03/24(月) 06:30:29 ID:bi7lOxG6] zshだが許せ。 for n in {1..100073}; mv お宝画像($n).jpg ero-pic`printf %06d $n`.jpg
832 名前:login:Penguin mailto:sage [2008/03/24(月) 10:57:24 ID:62iD1Dht] >>817 >>820 >>827 >>829 >>826 =>>828 だけど、ええとそれってシェルスクリプトで使えるの? /usr/bin/rename が置き換えられているとか? どうなっているんだろう。 >>830 うちでは動かないようだ。 日本語が混じるとためかな。あとかっことか。 で結局こうやったのだけど。 $ls | sed s/.*\(//g | sed s/\).*//g | awk '{printf("mv \"お宝動画(%d).jpg\" \"ero-pic%06d.jpg\"\n",$1,$1)}' | sh 前やったときはawkの代わりにcのプログラムでやってた。まぁawkでも同じか。
833 名前:login:Penguin mailto:sage [2008/03/24(月) 10:57:58 ID:62iD1Dht] >>831 zshって便利そうだね。
834 名前:login:Penguin mailto:sage [2008/03/24(月) 22:35:08 ID:7MP5JU0g] >>813 いろんなやり方があるけど、スクリプト内でいきなりmvなりrenameして 失敗すると悲劇なので、 mv "旧いお宝画像1.jpg" "新しいお宝画像1.jpg" mv "旧いお宝画像2.jpg" "新しいお宝画像2.jpg" mv "旧いお宝画像3.jpg" "新しいお宝画像3.jpg" mv "旧いお宝画像4.jpg" "新しいお宝画像4.jpg" mv "旧いお宝画像5.jpg" "新しいお宝画像5.jpg" mv "旧いお宝画像6.jpg" "新しいお宝画像6.jpg" (以下略) みたいに一旦テキストに落として、それざっと眺めてからshで流しなおしたほうが良いよ。 以前、 mv "旧いお宝画像1.jpg" "新しいお宝画像1.jpg" mv "旧いお宝画像2.jpg" "新しいお宝画像1.jpg" mv "旧いお宝画像3.jpg" "新しいお宝画像1.jpg" mv "旧いお宝画像4.jpg" "新しいお宝画像1.jpg" mv "旧いお宝画像5.jpg" "新しいお宝画像1.jpg" mv "旧いお宝画像6.jpg" "新しいお宝画像1.jpg" (中略) mv "旧いお宝画像1000.jpg" "新しいお宝画像1.jpg" ってやっちゃった(´・ω・`)
835 名前:login:Penguin mailto:sage [2008/03/24(月) 23:31:47 ID:If29/JKD] >>798 なんて頭の悪い…
836 名前:login:Penguin mailto:sage [2008/03/24(月) 23:35:42 ID:If29/JKD] >>819 > perl版renameというのは普通のrenameとは違いますよね?多分。 renameがperl版renameじゃないUNIX類って具体的には何があります? UNIX類じゃないけど、VMSはそうでした。
837 名前:login:Penguin mailto:sage [2008/03/25(火) 00:24:28 ID:FMsixLid] >>832 > 日本語が混じるとためかな。あとかっことか。 括弧の方だな。すまん。クォートするなりしてやってくれ。
838 名前:login:Penguin mailto:sage [2008/03/25(火) 00:44:35 ID:Mm1m5DLO] >>836 $ whereis rename rename: /usr/bin/rename $ less /usr/bin/rename "/usr/bin/rename" may be a binary file. See it anyway? 多分debianが変わり者では?
839 名前:login:Penguin mailto:sage [2008/03/25(火) 00:50:23 ID:6V9ksjI9] >>836 util-linux に入ってるよ。
840 名前:login:Penguin mailto:sage [2008/03/25(火) 00:56:57 ID:ukA1etix] そういやDebianはprenameとかいう名前になってんだっけね? 古典的なLinuxはこのrenameなのかな。 /* * rename.c - aeb 2000-01-01 * -------------------------------------------------------------- #!/bin/sh if [ $# -le 2 ]; then echo call: rename from to files; exit; fi FROM="$1" TO="$2" shift shift for i in $@; do N=`echo "$i" | sed "s/$FROM/$TO/g"`; mv "$i" "$N"; done -------------------------------------------------------------- * This shell script will do renames of files, but may fail * in cases involving special characters. Here a C version. */
841 名前:login:Penguin mailto:sage [2008/03/25(火) 01:44:34 ID:Mm1m5DLO] >>840 古典的なLinuxというより一般的な普通のLinuxはそうだろうな。 Here C Version.のほうな。 d.hatena.ne.jp/takunama/20061123/rename d.hatena.ne.jp/moriyoshi/searchdiary?word=*%5Bdebian%5D debianのrenameは/usr/bin/prenameへのリンクで prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト つーのが真相らしい。perl版renameはdebianの方言つーことだわな。困ったもんだね。
842 名前:login:Penguin mailto:sage [2008/03/25(火) 01:51:01 ID:uIxNik7B] それ自身はポータブルなPerlスクリプトだから もし使いたかったら$HOME/binあたりに突っ込めばいいんじゃない
843 名前:login:Penguin mailto:sage [2008/03/25(火) 02:00:22 ID:+i6zdHek] >>813 ls -1 ero_dir | sort | ruby -nle 'printf "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh
844 名前:login:Penguin mailto:sage [2008/03/25(火) 02:03:33 ID:+i6zdHek] 訂正orz ls -1 ero_dir | ruby -nle 'print "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh
845 名前:login:Penguin mailto:sage [2008/03/25(火) 02:05:27 ID:6V9ksjI9] >>841 > prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト ↓だってさ。 # This script was developed by Robin Barker (Robin.Barker@npl.co.uk), # from Larry Wall's original script eg/rename from the perl source.
846 名前:login:Penguin mailto:sage [2008/03/25(火) 03:45:05 ID:mfggD9uB] ラクダ本のだってのはだいぶ上の方で言及されとるがな。
847 名前:login:Penguin mailto:sage [2008/03/25(火) 06:52:15 ID:Mm1m5DLO] >>845 prenameは Debian のパッケージメンテナが独自に 「the perl source(perlのオルジナルセット、いわゆるラクダ本)」から パッケージ生成時に追加したスクリプト、つーことですね。 /usr/bin/renameがC版の代わりにこれで置き換えて拡張してあるのが debianの方言ということで。 実はラクダ本のやつは見たことがあるな。
848 名前:login:Penguin mailto:sage [2008/03/25(火) 17:01:59 ID:7L4Qk+Sn] ・>>840 にある元のシェルスクリプトはsed版正規表現を理解する ・Here a C versionは正規表現を全く理解しない ・perl版はperl版正規表現を理解する というわけでLinuxでも三種類あるんですね。
849 名前:login:Penguin mailto:sage [2008/03/25(火) 17:59:25 ID:Mm1m5DLO] こういう微妙な違いってひょっとするとトリごとに結構あるのかもしれないね。 スレからはずれるけど、apache/httpdのコンフィグがバージョン系列は 一緒なのにDebian系(ubuntuも)とRH系(RedHat/Fedora/CentOS)で まるっきり違ってて面くらったことがある。
850 名前:login:Penguin mailto:sage [2008/03/25(火) 18:02:21 ID:IQ4Jbr/0] コマンドなんかもちょっと違うくらいだから、設定ファイルの書き方なんて違っていて当たり前。
851 名前:login:Penguin mailto:sage [2008/03/26(水) 21:17:50 ID:B6BxqxUi] ツリー表示について find / -type d|sort|sed -ne'1b;s/[^\/]*\//┗━━/g;s/┗━━┗━━/┃ ┗━━/g; s/┗━━┗━━/┃ ┗━━/g; s/┗━━┃/┃ ┃/g;p' これだと下記のような表示になるのですが ┗━━proc ┃ ┗━━1 ┃ ┃ ┗━━attr ┃ ┃ ┗━━fd ┃ ┃ ┗━━task ┃ ┃ ┃ ┗━━1 ┃ ┃ ┃ ┃ ┗━━attr ┃ ┃ ┃ ┃ ┗━━fd ┃ ┗━━1106 ┃ ┃ ┗━━attr 不要な線を無くして見栄えを良くしたいのですが、何か良い方法はありませんでしょうか ┗━━proc ┃ ┗━━1 ┃ ┃ ┗━━attr ┃ ┃ ┗━━fd ┃ ┃ ┗━━task ┃ ┃ ┗━━1 ┃ ┃ ┗━━attr ┃ ┃ ┗━━fd ┃ ┗━━1106 ┃ ┃ ┗━━attr
852 名前:login:Penguin mailto:sage [2008/03/26(水) 21:52:30 ID:f9ufLLgD] よくわからんけど tree -dA じゃダメなの?
853 名前:851 mailto:sage [2008/03/26(水) 22:04:51 ID:B6BxqxUi] そういうコマンドがあるのは知ってるのですが # which tree /usr/bin/which: no tree 残念なことに入ってないんです。 いろいろ調べまわった結果がこれなんです。 もう少し自分でも調べてきます。
854 名前:login:Penguin mailto:sage [2008/03/26(水) 22:31:33 ID:f9ufLLgD] そうかtreeのないトリもあるのか。
855 名前:login:Penguin mailto:sage [2008/03/26(水) 23:21:22 ID:5Znd97qm] yumとかaptで入れられないっけ?
856 名前:login:Penguin mailto:sage [2008/03/27(木) 00:04:09 ID:ZXE2f6WU] >>853 PATH が通ってないだけとか。locate 辺りで調べてみたら? 他に何かあったっけ>探す方法
857 名前:851 mailto:sage [2008/03/27(木) 00:35:50 ID:yDbPGpUf] なんとか自己解決できました 下記のシェルスクリプトを「/usr/bin/tree」に置いて代用することにしました。 #!/usr/bin/perl use strict; my($top)=$ARGV[0]; if($top eq ""){ $top="."; } print "[$top]\n"; &tree("",<$top/*>); sub tree { my($bar,@dir)=@_; for my $i(0..$#dir){ my($bl1)=($i<$#dir)?"┣":"┗"; my($bl2)=($i<$#dir)?"┃":" "; my(@path)=split(/\//,$dir[$i]); if(-d $dir[$i]){ print "$bar $bl1 [$path[$#path]]\n"; tree("$bar $bl2",<$dir[$i]/*>); }else{ print "$bar $bl1 $path[$#path]\n"; } } } ちょっと中身を理解するのは難しいですけど、使いこなせたらperlも結構便利そうですね。
858 名前:login:Penguin mailto:sage [2008/03/27(木) 01:47:43 ID:nVTK+35Z] >>857 > 下記のシェルスクリプト ちょっとマテ
859 名前:login:Penguin mailto:sage [2008/03/27(木) 04:19:25 ID:LOwKjqa0] どう見てもシェルスクリプトでなくPerlスクリプトだなw ちなみに、鳥は何なの?
860 名前:851 mailto:sage [2008/03/27(木) 19:23:00 ID:yDbPGpUf] あ、確かにperlスクリプトですねw ちなみに鳥はCentOS4.6で、サーバー構築の勉強用で使ってます。 最小構成でインストールしたからtreeコマンドが入って無かったのかもしれないです。
861 名前:login:Penguin mailto:sage [2008/03/27(木) 19:43:49 ID:ysMS9Gn7] 美女の現われるスクリプトを教えて下さい。
862 名前:login:Penguin mailto:sage [2008/03/27(木) 19:56:21 ID:ORW3s1IJ] >>861 emerge beautiful_girl
863 名前:login:Penguin mailto:sage [2008/03/27(木) 23:51:02 ID:QsCLAAyg] >>851-857 pstreeだと思うんだ・・
864 名前:login:Penguin mailto:sage [2008/03/28(金) 00:18:06 ID:jk3nWqNP] >>863 find / だけど?
865 名前:login:Penguin mailto:sage [2008/03/28(金) 00:18:55 ID:deyesKz0] >>864 そだったw
866 名前:789 [2008/03/28(金) 01:42:56 ID:QgSpL7VJ] にやにや もりあがってんじゃねーかw
867 名前:login:Penguin mailto:sage [2008/03/28(金) 01:46:42 ID:deyesKz0] >>866 javascriptをjavaと呼ぶひと、こんばんはw
868 名前:login:Penguin mailto:sage [2008/03/28(金) 14:06:32 ID:Z7X2dF3N] cshで質問です。 下記のように変数をperlに渡したいんですが、変数を認識してくれません。 どうすれば良いですか? set hoge = funi perl -pe 'print $hoge' file
869 名前:login:Penguin mailto:sage [2008/03/28(金) 15:16:41 ID:KjmTtujq] >>868 シングルクォートをダブルクォートに変える
870 名前:login:Penguin mailto:sage [2008/03/28(金) 15:47:45 ID:Z7X2dF3N] >>869 ありがとうございます。 試してみましたが、ダメのようです。 setenvで与えると上手く行きましたが、setで出来る方法も知りたいです。
871 名前:login:Penguin mailto:sage [2008/03/28(金) 16:04:18 ID:UFHtgKJC] 無理。 あえてやるなら perl -e 'print "'"$hoge"'"' これはperlに print "funi" という式を渡したに等しい。
872 名前:login:Penguin mailto:sage [2008/03/28(金) 17:22:58 ID:Z7X2dF3N] >>871 ありがとうございます。 やってみたら出来ました。 意味は分かんないのでこれから調べてみようと思います。
873 名前:login:Penguin mailto:sage [2008/03/28(金) 17:26:00 ID:s6QtoqP9] csh じゃなきゃいかんの? sh 系で書いた方がいいんじゃない?
874 名前:login:Penguin mailto:sage [2008/03/29(土) 22:39:26 ID:Je2/7f5V] リダイレクト 「>&-」 (ディスクリプタ番号に 「-」 を指定した場合) の振舞いについて記述している manpage を探しています。 (manpage でなくともそれに準ずる文書であれば構いません) JM Project の bash(1) などや google で検索してみたのですが見つかりません。 >&- を使用しているシェルスクリプトは見つかりましたが、そこには正式な説明はありませんでした。 google って記号検索がとても弱いようなので シェルスクリプトとか GAME言語みたいな記号で頑張るタイプのを探すのは大変。 何か効果的な検索技があるんですかね。
875 名前:login:Penguin [2008/03/29(土) 22:48:22 ID:6BdICwv7] シェルスクリプトで連番を振る際に 1から100を1、2、3…ではなく 001、002、003…と出力させたい場合どうしたらよいでしょう? val=1 while $val lt 100 do echo $val val=expr`$val+1` done
876 名前:login:Penguin mailto:sage [2008/03/29(土) 22:53:17 ID:z7EKOxA5] >>875 for i in {0..9}; do printf "%03d\n" ${i}; done
877 名前:login:Penguin mailto:sage [2008/03/29(土) 22:57:09 ID:ZodWq0Ht] printfが嫌なら echo "000$i" | sed 's/0*¥(...¥)$/¥1/'
878 名前:874 mailto:sage [2008/03/29(土) 23:01:58 ID:Je2/7f5V] すみません。事故解決しました。 JM Project の bash(1) に記述されてました。
879 名前:875 [2008/03/29(土) 23:02:33 ID:6BdICwv7] >>876-877 凄まじくソッコーのレス ありがとうございます。 形式を指定してるってことくらいは分かりました。 調べてきます! ありがとございました。
880 名前:login:Penguin mailto:sage [2008/03/29(土) 23:06:18 ID:z7EKOxA5] >>875 単純に、必要な個数の名前のリストがありゃいいだけなら、 これでもいいと思う。 seq -f "moe_ero_guro_%03g.png" 0 9
881 名前:login:Penguin mailto:sage [2008/03/29(土) 23:16:52 ID:U1N+QPd9] >>876 {0..9} は bash3 じゃないと動かないはず。 まだ bash 2.05b の環境ってけっこうあるよね?
882 名前:login:Penguin mailto:sage [2008/03/29(土) 23:19:47 ID:ZodWq0Ht] seqは、あーここLinux板だからまず間違いなく入ってるな。
883 名前:login:Penguin mailto:sage [2008/03/29(土) 23:23:13 ID:ZodWq0Ht] seqだととびとびの値とかも作れるんだが、 単に連番がつくりたいとき個人的によくやるのは yes '' | cat -n | sed 100q とか。
884 名前:login:Penguin mailto:sage [2008/03/29(土) 23:30:36 ID:WiwCN3W0] seqって便利だね。知らんかった。 seq -f %03g 1 100
885 名前:login:Penguin mailto:sage [2008/03/29(土) 23:33:55 ID:z7EKOxA5] >>881 聞かれたから一応、答えておこう。そんな環境は知らん。 bash 2.05bなのはRHEL3かVineか、2005年ぐらいで閉鎖空間へ移行したやつだけだろ。
886 名前:login:Penguin mailto:sage [2008/03/29(土) 23:36:52 ID:WiwCN3W0] そうなのか。ある意味Vine恐るべしだな。
887 名前:874 mailto:sage [2008/03/29(土) 23:41:18 ID:Je2/7f5V] 組込系だったりすると bash どころか busybox ん中の sh (ash) だったりもする。 La Fonera の seq は -f オプションなんか無いので printf "%03d\n" `seq 1 10`
888 名前:login:Penguin mailto:sage [2008/03/30(日) 00:08:49 ID:36hI9fyL] この仕様は初めて知ったw $ printf "%03d%03d\n" 1 2 3 4 5 001002 003004 005000
889 名前:login:Penguin mailto:sage [2008/03/30(日) 00:34:47 ID:91o/3wOF] おまいらのseq には -w ってオプション無いの? seq -w 1 100
890 名前:874 mailto:sage [2008/03/30(日) 00:48:35 ID:VLE1BQAD] BusyBox v1.1.3 (2006.11.21-19:49+0000) multi-call binary Usage: seq [first [increment]] last Print numbers from FIRST to LAST, in steps of INCREMENT. -w ? そんなオプション見たこと無い。(笑)
891 名前:login:Penguin mailto:sage [2008/03/30(日) 15:18:36 ID:AAKkqqTb] 拡張子の変換ってどうやってる?俺は for f in *.hoge; do mv $f ${f%.hoge}.fuga done っていちいち打ち込んでるんだけど、なんかいい方法ない?
892 名前:login:Penguin mailto:sage [2008/03/30(日) 16:16:42 ID:SBrBro/C] >>891 過去ログ読め。
893 名前:login:Penguin mailto:sage [2008/04/01(火) 00:07:30 ID:mTzNKv6N] ニコ動の動画IDをwgetで落とせる直リンに変換するスクリプトないっすか?
894 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:45 ID:+SHNTduy] >>893 仕様出てるだろ。
895 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:57 ID:bWFHq2/G] >>893 nicovideo-dl
896 名前:login:Penguin mailto:sage [2008/04/01(火) 22:06:47 ID:Mk5CpRwr] $ oppai bash: oppai: command not found
897 名前:login:Penguin [2008/04/04(金) 13:09:23 ID:Lie/X+/S] 質問させて下さい。 ubuntu7.1 server を使用しています。 シェルスクリプトを勉強し始めてLinuxの設定セットアップシェルを作ろうとしています。 ■入力受付状態を省略し、自動入力にするにはどのようにすればいいのでしょうか? 例えばsambaのコマンドですが smbpasswd -a root をするとパスワードの入力を求められます。 普段なら手動でxxxxと入力するのですが、この作業を自動化したいのです。 色々調べてsedの使い方等はわかりファイルの書き換えによる設定はおおむね出来たのですが 上記のやり方は見つけることができませんでした。 どうかアドバイス頂けないでしょうか? 宜しくお願い致します。
898 名前:login:Penguin mailto:sage [2008/04/04(金) 21:25:51 ID:WDSwmhLm] >>897 Windowsから接続しているなら、TeraTermのマクロで何とかできるかもね。 ただユーザー名やパスワードが見えてしまう状態でファイルに保存するから セキュリティ上には良くないかも sambaの設定ファイルだけバックアップ取って ユーザーとパスワードはその都度入力するのが無難かと
899 名前:login:Penguin mailto:sage [2008/04/05(土) 11:09:58 ID:co3/wC9l] >>897 expectスクリプト expectに突いてくるサンプルを読んで
900 名前:login:Penguin mailto:sage [2008/04/05(土) 11:16:23 ID:co3/wC9l] すまん、サンプルついてないわ。 apt-get source expect して、サンプル見て。
901 名前:login:Penguin mailto:sage [2008/04/06(日) 14:52:52 ID:20te6qz4] シェルスクリプトできるけどPerlスクリプト出来ないやつなんなの?
902 名前:login:Penguin mailto:sage [2008/04/06(日) 15:42:41 ID:6d0Si0sC] 単にawkとかpythonが好きなんじゃないの?
903 名前:login:Penguin mailto:sage [2008/04/06(日) 17:08:40 ID:Y81bdbYI] >>901 シェル・スクリプトは基本だが、perl は awk やら python やらのワン・オブ・ゼムに過ぎないので、それが普通。 MS-Windows95の頃、cgiはperlスクリプトでという謎の風潮があった名残で、あなたのような疑問が出て来るのだろう。
904 名前:login:Penguin [2008/04/07(月) 02:13:58 ID:WGY+O99D] >>903 そうそう。 別に、cgiがシェルスクリプトでも問題ないし(使いにくいけど)、なんでもいい。 perlだろうが難だろうが、所詮手段なんだから、どうでもいいじゃんw
905 名前:login:Penguin mailto:sage [2008/04/07(月) 08:01:37 ID:DKzh8iuy] >>901 多分、 同じ構造化手続き型言語なのに何で方言によって使える使えないみたいなこと言ってんの? ということかと。
906 名前:login:Penguin mailto:sage [2008/04/07(月) 20:27:53 ID:ky4RCRjO] >>905 そうなら「シェル」スクリプトスレで何言ってんだこのバカは? ってな話しにしかならんからそれはなかろ。
907 名前:login:Penguin mailto:sage [2008/04/08(火) 00:22:25 ID:xWC78uSv] つまり、シェルスクリプターはアホです。
908 名前:login:Penguin mailto:sage [2008/04/08(火) 21:18:54 ID:mlftshp4] Aho氏 ttp://en.wikipedia.org/wiki/Alfred_V._Aho
909 名前:login:Penguin mailto:sage [2008/04/08(火) 21:20:29 ID:L1HkWImv] ahoさんはawkの偉い人でしょ
910 名前:login:Penguin mailto:sage [2008/04/09(水) 01:18:06 ID:8anDW64k] フィンランドではよくある名字。
911 名前:login:Penguin mailto:sage [2008/04/09(水) 01:40:20 ID:vyKS0pT6] えっほ
912 名前:login:Penguin mailto:sage [2008/04/09(水) 02:03:59 ID:JRgbXb6K] スキーでアホネンさんっていたな この人もフィンランドだったな
913 名前:login:Penguin mailto:sage [2008/04/09(水) 13:12:39 ID:vyKS0pT6] だれがあほやねん!
914 名前:login:Penguin mailto:sage [2008/04/09(水) 18:16:40 ID:pjxRKuKN] >>911 ,913 しょーもないレスして悲しくなってこないか?
915 名前:login:Penguin mailto:sage [2008/04/09(水) 19:47:59 ID:D07VbGXN] $ shoumo bash: shoumo: command not found
916 名前:login:Penguin mailto:sage [2008/04/09(水) 21:12:29 ID:HudBzGNB] $ which show /usr/local/mh/bin/show なんていう時代もありました。
917 名前:login:Penguin mailto:sage [2008/04/11(金) 16:25:19 ID:3vnovWPW] 000から999までリストを作りたいんですが、どうすればいいでしょう?
918 名前:login:Penguin mailto:sage [2008/04/11(金) 16:30:16 ID:p4V9vMAs] seq -w 0 999
919 名前:login:Penguin mailto:sage [2008/04/11(金) 16:38:37 ID:3vnovWPW] >>918 めちゃくちゃありがとうございます!!!
920 名前:login:Penguin mailto:sage [2008/04/11(金) 16:41:55 ID:h4xwic1O] 最近の bash なら echo 00{0..9} 0{10..99} {100..999} zsh なら echo {000..999}
921 名前:login:Penguin mailto:sage [2008/04/13(日) 00:08:59 ID:C50QhsEF] 端末に他の端末から書き込むようなデーモンとクライアントが欲しいです 例として、mltermとurxvtを立ちあげ、 mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら mltermの画面にaaaとか表示されるようなものです 同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…
922 名前:login:Penguin mailto:sage [2008/04/13(日) 00:37:03 ID:tBy+WuAg] 適当なログファイルに書き出して、端末の方にはtail -f (tailf)で流せば
923 名前:login:Penguin mailto:sage [2008/04/13(日) 08:41:28 ID:LTuSsBD0] 端末A $ echo 'term A' > /dev/console 端末B $ echo 'term B' > /dev/console に類したことは、まれにやる。
924 名前:login:Penguin mailto:sage [2008/04/13(日) 09:11:42 ID:DHms7wov] >>921 mlterm$ screen urxvt$ screen -x
925 名前:login:Penguin mailto:sage [2008/04/13(日) 09:16:44 ID:DHms7wov] つ ttysnoop
926 名前:login:Penguin mailto:sage [2008/04/13(日) 10:23:50 ID:+bcR3tRW] >>921 wall
927 名前:login:Penguin mailto:sage [2008/04/13(日) 15:29:10 ID:7nxEkg5V] >>924 それは違うんじゃね?
928 名前:login:Penguin mailto:sage [2008/04/14(月) 21:52:01 ID:yIAGZ+M9] rm -rf /* ┐('〜`;)┌ モウツカレタ
929 名前:login:Penguin mailto:sage [2008/04/15(火) 07:03:22 ID:KF+FiULr] dd if=/dev/zero of=/dev/hda
930 名前:login:Penguin mailto:sage [2008/04/18(金) 07:50:33 ID:9axeonkq] 運用しているマシンでちょっとした作業を行うとき、 nice bash したシェルで作業することがあるのですが、 いま自分が動かしているシェルの nice 値を簡単に 知る方法ってないですかね・・・
931 名前:login:Penguin mailto:sage [2008/04/18(金) 08:23:44 ID:JZJIXmIH] $ ps -o %n $$ そんなことも知らない人がniceするの? それに対話型のコマンドにniceはあまり意味がない。
932 名前:login:Penguin mailto:sage [2008/04/18(金) 09:08:39 ID:9axeonkq] その中でmakeしまくるので
933 名前:login:Penguin mailto:sage [2008/04/18(金) 09:57:57 ID:JZJIXmIH] alias make='nice --adjustment=-30 make'
934 名前:login:Penguin mailto:sage [2008/04/18(金) 11:45:33 ID:u356hJZU] reniceじゃダメなんでしょうか?
935 名前:login:Penguin mailto:sage [2008/04/18(金) 20:06:00 ID:xUbq9+ce] alias nice='ジャズ + クラシック / ロック'
936 名前:login:Penguin mailto:sage [2008/04/18(金) 23:11:33 ID:cOa8NbkQ] nice boat.
937 名前:login:Penguin [2008/04/19(土) 13:43:25 ID:khf4hkQE] >>934 >reniceじゃダメなんでしょうか? topでもいいよな。
938 名前:login:Penguin [2008/04/19(土) 16:17:44 ID:SCXXqtIf] bashのシェルスクリプトで、 文字列に正規表現のフィルタをかけたいのですが 以下の場合、なぜエラーになるかわかりません。 何が悪いですか? expr `ps` : ".*" -> expr: syntax error var1="aaa" expr $var1 : ".*" -> expr: syntax error
939 名前:login:Penguin mailto:sage [2008/04/19(土) 18:02:41 ID:XPjpMm+j] expr "`ps`" : ".*" var1="aaa" expr "$var1" : ".*"
940 名前:login:Penguin [2008/04/19(土) 20:46:24 ID:SCXXqtIf] >>939 それで出来ました。ありがとうございます。 でも理由がいまいちわかりません。 ” ”で囲っていない為 → 文字列型ではない為 → では$var1は何を返すのか?
941 名前:login:Penguin mailto:sage [2008/04/19(土) 21:02:50 ID:SyasDtFa] hdやbdみたいに 2進数表示するプログラムありませんか?
942 名前:login:Penguin mailto:sage [2008/04/19(土) 22:41:34 ID:QZlXANdf] >>941 od
943 名前:login:Penguin mailto:sage [2008/04/19(土) 22:50:17 ID:SyasDtFa] odだと2進数は表示ですう。 もう自分で作っちゃいました・
944 名前:login:Penguin [2008/04/20(日) 10:43:22 ID:C3cqRfnQ] >>940 >” ”で囲っていない為 → 文字列型ではない為 → では$va >r1は何を返すのか? 確かに、おれも気になるぞ
945 名前:login:Penguin mailto:sage [2008/04/20(日) 13:49:25 ID:yhaYk8sL] なんというか、このスレで話をするための最低限の知識レベルを、>>940 や941は遥かに割り込んでいる気がするんだが。
946 名前:login:Penguin [2008/04/20(日) 14:55:30 ID:3JVOMAOF] >>938 は、自分なりに考えた結果、以下のような結論になりました。 シェルスクリプトは、型だのなんだのはなくて C言語でいう単純なマクロの展開レベルのものしかしない。 例えば、先の例だと、 expr `ps` : ".*" ↓ expr PID TTY TIME CMD 2295 pts/1 00:00:00 bash 2407 pts/1 00:00:00 ps : '.*' ↓ シンタックスエラーでNG ""で囲うと、 expr "`ps`" : ".*" ↓ expr 'PID TTY TIME CMD 2295 pts/1 00:00:00 bash 2407 pts/1 00:00:00 ps' : '.*' ↓ OK 「echo "aaa " `ps`」が通るんで矛盾しているなぁと思っていたんですが よく考えるとそんなことは無かったですね。
947 名前:login:Penguin mailto:sage [2008/04/20(日) 17:11:52 ID:oNW0JD98] 逆に文字列処理を一通りしてから実行させられるから、 >>938 が最初考えていたみたいに単語区切りが強い場合より、 出来ることが増えるんだけどな。 その代わりプログラマがちゃんと構文構成の責任を持たないといけないけども。
948 名前:login:Penguin mailto:sage [2008/04/23(水) 22:57:21 ID:xEICV4cP] grepの結果で AAAとBBBのOR検索をしたいのですが、 tail -f /var/log/maillog | grep [AAA|BBB] とやってもだめでしたorz どうすれば、OR検索ができるのでしょうか? ANDは、パイプで追加すれば可能なのですが・・。
949 名前:login:Penguin mailto:sage [2008/04/23(水) 23:29:21 ID:Y+58Od8z] なんで tail -f なんてする必要が有るんだ?
950 名前:login:Penguin mailto:sage [2008/04/23(水) 23:33:35 ID:M4AkpEZt] >>948 grep -E "(AAA|BBB)" もしくは egrep "(AAA|BBB)"
951 名前:948 mailto:sage [2008/04/24(木) 04:44:09 ID:8uaGXJVC] >>950 egrepでしたか、ありがとうございます。 >>949 1秒に100行以上流れるログなので、速すぎて読めないのよねw
952 名前:login:Penguin mailto:sage [2008/04/24(木) 09:43:23 ID:C5h8jkbM] 一秒に100行以上流れるとか全然関係ないと思うぞ。
953 名前:login:Penguin mailto:sage [2008/04/24(木) 10:09:04 ID:iBrwQJHF] そんなにおかしいか? おれもよくやるけどな。
954 名前:login:Penguin mailto:sage [2008/04/24(木) 19:19:48 ID:BuhR71Gk] >>952 logの監視は他にどんな手段でやってるの?
955 名前:login:Penguin mailto:sage [2008/04/24(木) 19:42:01 ID:28W2p82+] tail -fしても速く流れるのは変わらないだろ? 大きなファイルの増分だけ見たい時は有効だけど。
956 名前:login:Penguin mailto:sage [2008/04/24(木) 19:54:48 ID:iBrwQJHF] たとえば tail -f access_log | grep 10.99.78.22 とかやっといて、10.99.78.22 からアクセスしながらログを見たりする。 tail -f access_log だけだとログが多過ぎるし grep 10.99.78.22 access_log ではリアルタイムに見れない。 つーか、なんでそんなに否定したがるんだ?
957 名前:login:Penguin mailto:sage [2008/04/24(木) 20:51:49 ID:PIJRHfrL] そんなのは常識。 tail -fするのは、増分を見たいからだろ? 速く流れるのは関係ない。それはgrepの役目。 >>949 に対する>>951 の答えはおかしい。 それが読み取れない>>953 も疑問。
958 名前:login:Penguin mailto:sage [2008/04/24(木) 23:00:30 ID:amh/02/G] >>956 基本だよな。それって。
959 名前:login:Penguin mailto:sage [2008/04/25(金) 01:12:52 ID:05aUO6OC] 役に立たないのは949,952,957のレスだろ つegrep -v '(949|952|957)'
960 名前:login:Penguin mailto:sage [2008/04/26(土) 03:30:44 ID:2buln9M4] ファイルを検索して、 ファイル名によって分岐させたいと思っています。 以下のようにスクリプトを書いたのですが、 if [ $file = *.o ] がうまく動作してくれません。 どこが間違っているのでしょうか? # $1はディレクトリ for file in `find $1` do if [ -x $file ]; then echo "x: Name=$file" else if [ $file = *.o ]; then # .oで終わるファイル echo ".o: Name=$file" else echo "not .o: Name=$file" fi fi done
961 名前:login:Penguin mailto:sage [2008/04/26(土) 03:41:55 ID:l2xr5sbr] [ $file = *.o ] の * がパス名展開されるから。 こういう時は case 文使うと楽。 case "$file" in *.o) echo ".o: Name=$file" ;; *) echo "not .o: Name=$file" ;; esac
962 名前:960 mailto:sage [2008/04/26(土) 04:22:04 ID:2buln9M4] >>961 ありがとうございます! >* がパス名展開される なるほどです。 今後のためにお聞きしたいのですが、 このままifで処理するには どのようにしたらよいのでしょうか?
963 名前:login:Penguin mailto:sage [2008/04/26(土) 05:02:51 ID:+ITD/myA] expr でパターンマッチさせた結果を判定するのが常套手段だと思う。 でも解り易さで俺も>>961 おすすめ。 shでなくbashやzshに依存するやり方で良いなら他にもあるので、manするとエエでがす。
964 名前:960 mailto:sage [2008/04/26(土) 11:07:16 ID:2buln9M4] >>963 expr、なるほど。 C++やってるときも、caseなんてifがあるから要らね、 とか言ってるのをshにも持ち込んでしまったわけですが、 shではcaseを格上げします。 ありがとうございました。
965 名前:login:Penguin mailto:sage [2008/04/26(土) 11:09:05 ID:zBt65CRz] >>964 ざけんな。switchの方がコードの見通しがよくなる場面が多々ある。 適材適所だ。
966 名前:login:Penguin mailto:sage [2008/04/27(日) 00:22:17 ID:FoD+QJwV] 一文字のみ、小文字を大文字に置換の方法、教えてください _linux から _Linux へ (この場合、小文字lを大文字Lへ、一文字のみ) trとかsedでぐぐってみましたが、すべての文字に適用される例のものばかりで。。。
967 名前:login:Penguin mailto:sage [2008/04/27(日) 00:31:12 ID:mG61TWcx] echo _linux | sed -e 's/[a-z]/\U&/'
968 名前:login:Penguin mailto:sage [2008/04/27(日) 01:13:49 ID:FoD+QJwV] >>967 ありがとうございます 期待通りの動作になりました、感謝