- 1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その14 pc12.2ch.net/test/read.cgi/unix/1233179688/
- 645 名前:636 mailto:sage [2009/11/26(木) 21:13:03 ]
- >>640
うまくいきました トンクス 他の方もレスありがとうございます シミュレーションで得られたデータを出力する際にスクリプトを使用しています。 周りがcsh使ってたので、それを使ってましたが、 shの方が問題点が少なそうなので、 そっちにシフトしてみようと思います。
- 646 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/26(木) 21:16:33 ]
- 半導体屋か? あいつら何でcsh好きなんだ?
- 647 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/26(木) 21:19:13 ]
- >>640 だと四捨五入されない。>>639 がお勧め。
- 648 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 11:45:22 ]
- 以前にcshで作って、それですんでりゃそうなるだろう。
- 649 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 12:14:17 ]
- tcsh以外に便利なインタラクティブシェルがなかった時代の負債といえようか
- 650 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 12:33:23 ]
- ちょっとしたスクリプトの場合、cshの方が書きやすい場合もある。
四則演算が出来るとか配列が使えるとか、要はケースバイケース
- 651 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 12:38:06 ]
- >>650
四則演算も配列も、今時のsh(系)でできる。
- 652 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 12:46:50 ]
- ケースバイケースでcshスクリプトなんて混ぜられちゃ迷惑だ
- 653 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 13:18:36 ]
- コピペで数千行を超えるのcshスクリプト作るんだぜ。
ちょっとしたを遥かに超越している。
- 654 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 13:23:31 ]
- 実績があります、とか言ったりなんかしちゃったりして
- 655 名前:名無しさん@お腹いっぱい。 [2009/11/28(土) 17:21:38 ]
- UNIXド素人です。
手詰り状態なのでアドバイス頂けると幸いです。 ◆処理内容 Aディレクトリから、Bディレクトリにファイルをコピーする。 (コピーオプション:-p -f) ◆コピー条件 Bディレクトリのファイルの更新時間とAディレクトリのファイルの 更新時間が異なる場合。 ◆その他 更新時間が異ならない場合は、エラーとし、1を戻り値とする。 上記のようなスクリプトを作成したいのですが どのような処理にしたらよろしいのでしょうか?
- 656 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 18:05:43 ]
- 書いてあるとおりに処理しよう
- 657 名前:655 [2009/11/28(土) 18:21:04 ]
- すいません。。
意味わからない質問になっていました。。 やり方がわからない処理は「更新時間を比較する」点です。 お互いの更新時間を変数に入れ、同じ場合と違う場合で処理を決めれば いいことはわかるのですが、更新時間を比較することなどできるので しょうか?
- 658 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 18:23:44 ]
- >>655
要点だけ書くよ。 if [ "$file1" -nt "$file2" ]; then cp -pf "$file1" "$file2" fi
- 659 名前:655 [2009/11/28(土) 18:43:33 ]
- >>658
ありがとうございます。 ファイルが更新された場合、サイズや更新時間で比較するしかないと思われるのですが 更新時間や、ファイルの詳細?を変数に格納することは可能なのでしょうか?
- 660 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 18:47:33 ]
- >>659
md5sumとかでハッシュ値を見たら?
- 661 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 18:54:17 ]
- >>659
せっかく回答もらってるのに意味をちゃんと理解しろよ。 [ A -nt B ] ってやったら、これで更新時間を比較してるんだよ。 別に更新時間を変数に入れる必要なんかない。 -nt は、"newer than" ね。
- 662 名前:655 [2009/11/28(土) 19:16:35 ]
- >>658 >>661
そういうことですね!! ファイルの更新時間ではなく、ファイル自体を比較すればいいのですね!! 理解力が無く、ご迷惑おかけいたしました・・・ アドバイスを参考にスクリプトを作成してみたいと思います。 ありがとうございました。
- 663 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:19:11 ]
- >>662
違うよ。 ファイル自体なんて比較してない。 更新時間を比較してるの。 if [ fileA -nt fileB ]; then ... ってやると、fileA と fileBの更新時刻を比較して、 その結果で動作が決まるんだよ。 fileA/fileBの中身は読んでない。
- 664 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:23:46 ]
- hashinfo.com/
- 665 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:28:45 ]
- md5sumとかハッシュとか言ってる回答者の言うことはここでは無視しとけ。
単純にシェルスクリプトから [ ] (testコマンド)で時刻比較できるんだから。
- 666 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:33:06 ]
- >>662は日本語読解力からしてダメだな。
- 667 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:36:34 ]
- 更新時刻が異なる場合、なのに、newer than だけでいいんだろうか
- 668 名前:655 [2009/11/28(土) 19:36:40 ]
- >>663
少し調べてみましたところ、ファイルのタイムスタンプ、つまり更新時間 を比較しているのですね。 ファイルの比較には -nt -ot の2種類があるようですが "="や"!="で比較することは無理と理解してよろしいのでしょうか?
- 669 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:42:39 ]
- >>667
だから>>658 は「要点だけ」って言ってるんだよ。 せっかく >>668 が -nt と -ot を調べたんだから、 それを -o すれば 時刻の "!=" を条件を記述できることに気づくはず。
- 670 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 21:50:23 ]
- >>668
> ファイルの比較には -nt -ot の2種類があるようですが >>663を読み直せ…
- 671 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 22:22:24 ]
- rsync 使え、で終わる気がする
- 672 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/29(日) 00:01:55 ]
- >>668
> "="や"!="で比較することは無理と理解してよろしいのでしょうか? そう考えていいよ。「異なる場合」って言ってるんだから、 「「新しい場合」または「古い場合」」 っていう条件が必要なんでしょ? それぞれ>>663の書式を使って-ntと-otでできるよ。君の言うとおりだよ。 あとは二つをつなぐ「または」を調べてみてごらん。>>669もそう言ってるけどね。 >>671 俺もそう思う。
- 673 名前:655 [2009/11/29(日) 00:32:15 ]
- >>672
if [ FILE1 -nt FILE2 -o FILE1 -ot FILE2 ] ; then cp -p -f … exit 0 else exit 1 fi とすればいいのですね! >>658 >>663 そこまで読み取ることができず、ご迷惑おかけいたしました。。
- 674 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/04(金) 21:09:44 ]
- $ echo "aaa.kp//////a/bbb//ccc///ddd/////" | sed -e 's@//*@/@g' -e 's@http:/@@g'
aaa.kp/a/bbb/ccc/ddd/ 一応目的の動作は達成しているのですが、sedがマヌケです。 もうちょっと素敵な方法はありますか?
- 675 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/04(金) 21:32:24 ]
- >>674
echo 'aaa.kp/a/bbb/ccc/ddd/'
- 676 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 00:35:32 ]
- sed -e 's@\([^:]\)//*@\1/@g'
- 677 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 00:49:25 ]
- マジキチ
- 678 名前:名無しさん@お腹いっぱい。 [2009/12/05(土) 19:23:28 ]
- 複雑多数のサブディレクトリを持つディレクトリAを複製したい
但し、いくつかのサブディレクトリについては複製対象外としたい。 現状以下のようにやってます。 cp -rp A B rm -rf B/a/b/c rm -rf B/bb/aa/cc ・・・消したい対象分ひたすら羅列。 サブディレクトリ内のサイズが大きく、cp,rmで余計な時間が掛かってしまいます。 AをBとして複製する場合に、「このサブディレクトリ以外すべてコピー」 またいな記述方法はありますでしょうか? sh,bashでお願いします。
- 679 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 19:40:24 ]
- cd A
tar cf - . --exclude a/b/c --exclude bb/aa/cc | tar xf - -C /path/to/B
- 680 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 19:49:17 ]
- >>679
なるほど、tarのアーカイブファイルを経由させるのですね。 ありがとう。やってみます。
- 681 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 22:18:32 ]
- find . -print |egrep -f exlude-pattern-file |cpio -pumd destdir
さらに、コピーでなくてハードリンクで済ませられるなら、高速、省スペース。 find . -print |egrep -f exlude-pattern-file |cpio -pumdl destdir
- 682 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 23:09:18 ]
- ありがとう。一考してみます。
- 683 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/06(日) 23:26:04 ]
-
>>676 規制で書けかなった。ありがとう。
- 684 名前:名無しさん@お腹いっぱい。 mailto:sega [2009/12/10(木) 10:18:03 ]
- findの判別式を単独のファイルに適用して、真偽値だけほしいんだけど
どうしたらいい?
- 685 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:27:52 ]
- 例えば
[ -n "`find /path/to/file -mtime 7 ...`" ] みたいな感じか?
- 686 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:34:08 ]
- いや、
find /path/to/file -mtime 7 2> /dev/null; echo $? だろ。
- 687 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:39:11 ]
- ファイルが正常に処理されれば、判定結果にかかわらず戻り値はいつも0だよ
- 688 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:42:01 ]
- >>686
マッチしてもしなくても$?は0なのよ >>685 なるほど文字列の長さを見るのか とりあえずこれでやってみるわ超サンクス
- 689 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 19:44:25 ]
- 他サーバ上のtar.gzファイルを解凍する方法はないでしょうか?
- 690 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 20:28:24 ]
- sshとか可能なら普通に解凍できるから、そうじゃない質問だとして、
エスパー募集だな
- 691 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 20:55:52 ]
- >>690
たとえばftpで他サーバに接続して、gzip -cd | tar xvf - のようなことはできないでしょうか?
- 692 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 20:59:06 ]
- >>691
wget ftp://user:pass@他サーバ/path/to/hoge.tar.gz -O - | tar zxvf -
- 693 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 21:08:14 ]
- >>692
ありがとうございます。 ちょっと試してみます。
- 694 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/12(土) 13:37:48 ]
- v6shell.org/
にてるような、変わっているような。
- 695 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 13:17:58 ]
- すみません、スクリプト内で使用されている変数について教えてください。
使用しているOSはCentOS5.3です。 今、勉強がてら/etc/init.d/functionsを読んでいるのですが、 functions内で使用されている変数$LSBの意味がわかりません。 使用例 :[ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] のように記述されています。 例えば、上記例の$BOOTUPは、/etc/sysconfig/init内で定義されているのを確認できました。 しかし$LSBは/etc/sysconfigや、/etc内のファイルをざっと検索してみても大本の定義が発見できません。 setにもenvにもありません。 $LSBは、意味ありげに見えるだけで、単になんでもない、普通の変数なんでしょうか? それとも、ちゃんとどこかで定義されているんでしょうか? もしかしたら、変数ではなく別のものなんでしょうか? しょうもない質問で申し訳ありませんが、ご教授ください。よろしくお願いします。
- 696 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 14:00:20 ]
- 教授はあげません。
- 697 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 14:33:04 ]
- Linux Standard Base準拠なら定義しておく、ってやつかな?
- 698 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:05:57 ]
- 「ご教授」で正しいんだよ。
- 699 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:28:33 ]
- そして、それに対する>>696の返しは絶妙だったな。
- 700 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:42:03 ]
- いや、正しくない。
「教授する」というのは体系だててきちんと教えるという意味なので、 どこの馬の骨かわからない匿名掲示板の単発質問者には「教授」しない。
- 701 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:53:37 ]
- >>700
だから「体系だててきちんと教え」てください、って >>695 が言ってるんだから 言葉として正しいじゃん。 それに対して、>>696 は「教授する」自体が間違いだと勘違いして 恥を晒しちゃったね。
- 702 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 16:04:02 ]
- 恥を晒してる奴がいると思うとすかさず飛びつく奴って流石だよな。
楽しい休日の午後のひとときって感じ。
- 703 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 17:18:06 ]
- >>701
メクラ? >>695のどこに「体系だててきちんと教えてください」と書いてあるんだ? 揚げ足とったつもりが恥晒して惨め過ぎ。
- 704 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 17:51:05 ]
- >>695
定義してない可能性があるから:-なんやで!
- 705 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:08:34 ]
- >>703
「ご教授ください」=「体系だててきちんと教えてください」(同値) >>695 には「ご教授ください」と書いてある、 イコール >>695 は「体系だててきちんと教えてください」と言っている
- 706 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:46:44 ]
- けんかをやめて〜
ふたりをとめて〜 わたし〜の〜ために〜 あらそ〜わない〜で もう こ〜れ〜い〜じょ〜う〜♪
- 707 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:50:49 ]
- じゃあ体系だてて回答してやれ
- 708 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 19:44:15 ]
- 695です。皆さまなんだかお騒がせしてすみませんでした。
>>697 >>704 ありがとうございます、Linux Standard Baseですか。規格だとしか捉えていなかったので、 関係あるとは想像もしていませんでした。 $BOOTUP=verboseだとold-style bootupらしいので、 加えてLinux Standard Base準拠でないことを確認したいとかなんでしょうかね。 Linux Standard Baseのページには、 「個々のライブラリのインターフェースの装備、および、、各インターフェースに関連したデータ構造・定数を規定しています」 とあったので、どこかで何か定義されているんでしょうね。以下のページを見つけたのですが探しきれませんでした。 dev.linux-foundation.org/betaspecs/booksets/LSB-Core-generic/LSB-Core-generic.html 実体がわからないのは残念ですが、私自身が納得できたので、先に進むことができそうです。 皆さま、本当にありがとうございました!
- 709 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:01:27 ]
- ${LSB:-}
:- ってどういう意味?だれか教えて。 #一瞬 :-) かと思ったけど違ったので :-p
- 710 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:03:54 ]
- ・・・と書いておいてなんだけど、man bashに書いてあった
${parameter:-word} デフォルトの値を使います。 parameter が設定されていないか空文 字 列であれば、 word を展開したものに置換されます。そうでなければ、 parameter の値に置換されます。 へー。しらなかった。
- 711 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:06:40 ]
- :-)
- 712 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 23:43:43 ]
- >>705
バカメ。「ご教授ください」と「体系だててきちんと教えてください」は同値だが、 >>695は誤用だから同値じゃ無いという指摘だ。 論理的思考の出来ないバカは恥を晒すだけだから引っ込んでろ。
- 713 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 23:58:55 ]
- 日曜日最後のレスがそれじゃあな…
- 714 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 00:50:09 ]
- ご教示ください
とすればおkだったような予感w
- 715 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 02:38:22 ]
- >>714
ご教授くださいだろ、バーカ! こんな展開だと予想
- 716 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 07:41:23 ]
- >>712
そうじゃなくて、 あくまで誤用であって、「ご教授する」という言葉は日本語として正しい、 というのが主張。 (誤用だけど、言葉自体は正しいの) ところが、>>696 曰く、 >教授はあげません。 ↑ という突っ込みは、「ご教授する」という言葉自体も間違っていると 思い込んでいる。 もし、「誤用」に対する突っ込みなら、 「(こんな掲示版では)ご教授はできません」 となるはずで、 「教授はあげません」みたいには言わないはず。 よって、 >>696 は、「ご教授する」という言葉自体を知らなかったという天で 恥を晒したんだよ。
- 717 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 11:12:52 ]
- なにそれこわい
- 718 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 13:14:13 ]
- うわ、まだ続けてるのかよ
- 719 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 18:25:12 ]
- >>716
アホ丸出しの言い訳止めろ。>>695の用法も正しいと言うのがお前の主張(>>705)。 >>696はオレじゃないが、誤用に対して「あげない」とからかっている。 お前は用法を知らずに揚げ足とったつもりで恥を晒したうえに、小学生並みの見苦 しい言い逃れを続けている単なるバカ。お前の負け。 >>705 > 「ご教授ください」=「体系だててきちんと教えてください」(同値) > >>695 には「ご教授ください」と書いてある、 > イコール > >>695 は「体系だててきちんと教えてください」と言っている
- 720 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 19:46:10 ]
- 関係ない話はくだらないからやめようぜ。
>>695の質問の本質はLSBはどんな意味をもつ変数なの?ってことだろ LSBについてまともに答えてるの>>697くらいじゃねーか
- 721 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 20:31:51 ]
- レスありがとうございます
と書くだけでスレが荒れるのと同じだな
- 722 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 21:02:19 ]
- >>721
FreeBSDって何???
- 723 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 22:46:41 ]
- >>722
www.freebsd.org/ 荒したいならスペースが足らぬわ
- 724 名前:名無しさん@お腹いっぱい。 [2009/12/23(水) 17:35:56 ]
- cshについて質問させてください
変数の中身が文字列か数字か判断して処理をしたいのですがどうやったらわかりますか? if ($1 == [0-9]*) こんな感じでいけるのかなっておもったけどうまくいかずで…
- 725 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 17:40:30 ]
- 回答が欲しいなら「ご教授ください」って書かないと誰も答えないよ。
- 726 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 19:16:51 ]
- パイプラインについて質問です.
% ls foo.txt bar.txt baz.txt の状態で, % ls | wc -l とやると3が返ってきます. これは,パイプラインを通すとlsの結果に改行が挿入されるということなのでしょうか? % ls | xargs echo | wc -l とすると1が返ってくるので,この結果の違いが不思議です.
- 727 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 19:24:28 ]
- まずは ls | cat して確かめてみなさい
一応、はまりそうなので正解を言っておくと、ls が、出力先がパイプか端末かを 調べて、出力を変えています。パイプが変えてるのではありません。
- 728 名前:名無しさん@お腹いっぱい。 [2009/12/23(水) 19:26:27 ]
- 724です。
是非ともご教授いただきたいです。 よろしくお願いいたします。
- 729 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:19:56 ]
- >>724
先頭が数字かどうかなら if ( $1 =~ [0-9]* ) でいけるけど、より正確に数値かどうか判定するとなると cshでは難しいかもしれない 教授は付けないほうがいい
- 730 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:37:33 ]
- 「ご教授」で正しいんだよ。
- 731 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:38:39 ]
- >>727
lsが状況に応じて出力を変えてるとは思いませんでした. ありがとうございます.
- 732 名前:724 mailto:sage [2009/12/23(水) 20:42:48 ]
- >729さん
cshでは難しいですか。。。 回答ありがとうございます。
- 733 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:46:57 ]
- >724
if ( { ( echo -n "$1" | grep '^[0-9][0-9]*$' > /dev/null ) } ) echo yes,yes,yes
- 734 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 23:37:25 ]
- >>724にかなり近いのですが、質問します。
kshで「変数の中身が半角英数14桁」であることを確認したいのですが、上手くいきません。 if [ `expr $hoge : [a-zA-Z0-9]+` -ne 14 ] ; then # 半角英数14桁以外 fi と書いてみたのですが、+が正規表現になってくれず。 [a-zA-Z0-9][a-zA-Z0-9]*も最初2桁分しかチェックできず。 上手く正規表現でチェックできる術はないでしょうか? お分かりの方、ご教授お願いします。
- 735 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/24(木) 01:15:38 ]
- $ echo "foo" | if egrep -qs '^[a-zA-Z0-9]+$'; then echo yes; fi
yes $ echo "_foo" | if egrep -qs '^[a-zA-Z0-9]+$'; then echo yes; fi $
- 736 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/24(木) 04:12:15 ]
- >>734
if [ `expr $hoge : "[a-zA-Z0-9]\+"` -ne 14 ]
- 737 名前:734 mailto:sage [2009/12/25(金) 07:48:46 ]
- >>735
>>736 アドバイスありがとうございます。 見た目に単純な736の記述を試して上手く動作したので、この形で実装したいと思います。 \でエスケープすると正規表現になるとは知りませんでした。完全に逆だと思ってました。 エスケープもダブルクオートも試したのですが、両方やるとは思いつかず… ありがとうございました。
- 738 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 18:19:46 ]
- えーと、複数ファイルを結合したいのですが、
・ファイル名の一部が一致している ・結合すべきファイルの数は分かっている ・一致している部分の文字数、箇所も分かっている ・このようなファイルの組がディレクトリ内に複数組ある というような条件で、例えば file01abc.txt file02abc.txt file03abc.txt file01def.txt file02def.txt file03def.txt file...... で、わざわざ cat file??abc.txt > fileabc.txt cat file??def.txt > fileabc.txt cat............ などと書かずに一致部分を判別して全ての組を結合させたいのです。うまく出来る方法はあるでしょうか?
- 739 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 18:35:08 ]
- >>738
普通に、 for f in abc def do cat file??"$f".txt > file"$f".txt done
- 740 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:13:07 ]
- すみません、ちょっと説明足りませんでした。
そのabc、defってのが異なる組がかなり大量にあって、かつその文字列が そこそこ長いこと、毎回その生成される文字列が異なることから、いちいちinの後の部分を 書き出さずに出来るようにしたいのです。つまりこの場合、7,8,9文字目が (具体的な文字列は何だか分からないけれど)一致しているファイル全てを結合する、 というような指定は出来ないでしょうか?
- 741 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:19:01 ]
- >>738
普通に、 for ff in * do f=${ff:6:3} cat file??"$f".txt > file"$f".txt done
- 742 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:35:08 ]
- >>740
これで合ってる? ls | sed -n 's/^......//p' | sed 's/....$//' | sort | uniq | while read i do cat file*${i}.txt > file${i}.txt done
- 743 名前:名無しさん@お腹いっぱい。 [2009/12/26(土) 19:36:00 ]
- 10
22 3 11 25 90 12 ・ ・ ・ ってあるTextで平均から飛び出る奴(今回は90)切りたいんだけど ヒントないっすか?
- 744 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:38:28 ]
- 偏差値求めて標準偏差の何倍とかで検出だな
- 745 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 20:34:25 ]
- >>741
>>742 ありがとうございます。どっちも動作は完璧です。 さらにお手数をおかけしますが後学のために、 軽く何をやってるのか教えてもらえないでしょうか。 741はワイルドカードの挙動がよく分からないので3行目の時点で ffに何が入っているのかよくわかりません。ffの6バイト目から3文字分を fに代入し直しているって理解は合っていますか? 742は-n以降何をやってるか全く分かりません… 特に並んでいるドットの意味を教えてもらえないでしょうか? 察するに文字数ですよね?
|

|