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 あたりに色々と。
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 ありがとうございます 期待通りの動作になりました、感謝