1 名前:デフォルトの名無しさん [2005/04/04(月) 03:43:03 ] シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。
528 名前:デフォルトの名無しさん [2007/02/11(日) 11:20:30 ] シェルスクリプトって例外処理できます? 例えば一つ上の行でエラーが発生したときはそのシェルスクリプトの処理を終了するとか。
529 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 12:14:42 ] >>528 プロセスの終了ステータスを見て条件分岐することはできる。
530 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 13:13:06 ] >>528 普通は>>529 の終了ステータスを使う。エラー時に終了するだけならこれで十分。 シグナルが飛ぶならtrapでシグナルハンドラを書くのもあり。 try/catch/throwに直接対応するものは、Bourne shell、csh、bashにはない。
531 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 20:02:45 ] set -eしとけば、(検査されていない)終了ステータスが0以外の場合は スクリプトが終了する。終了処理はtrap "..." 0
532 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 08:56:55 ] どもですm(_ _)m
533 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:47:34 ] リダイレクトのことで質問なんですが echo hoge > test ls -l < test とやるとlsは標準入力(つまりtest)の内容を読み込むのなら 普通にls -lとした場合はキーボードからの入力を読み込もうとすると思うんですが、 そうはならないのは何故なんでしょうか?
534 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:19:42 ] >>533 入力がリダイレクトされても、lsは何も読むわけではない。 つまり、ls -l < test と書いても ls -l と書いても同じ事。
535 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:42:01 ] たしかにls -l < testとやっても変わらないみたいです。 今、入門UNIXシェルプログラミングという本で勉強しているのですが、 その本の89ページには echo abc nnn > xyz ls -l < xyz とするとls -l abc nnnとしたときと同じ結果になる。書いてあったのですが、 この本が書かれた時と今ではlsの動作が異なるということなんでしょうか?
536 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:55:46 ] いつの時代か知らんが、lsが標準入力から引数を貰うような作りになってる という話は聞いたことがないな。 ls -l `cat xyz`とか xargs ls -l < xyz ならありえる。 xargsは、はしょって言うと、標準入力から受け取ったものを、自分に与えられ た引数につなげたて、その全体を実行するコマンド。、
537 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:01:14 ] うーんサンプルコードを見ても特にxargsを使っているわけではないようです。 本のタイトル名で検索したらサポートページがあったので、後で この件に関してメールを送ってみようかと思います。ありがとうございました。
538 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:12:21 ] >>537 物はこれか? ttp://shop.sbcr.jp/isbn/shell/index.htm ここには載っていないようだな。 ttp://shop.sbcr.jp/isbn/shell/errata.htm
539 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:17:38 ] この本か。 会社に置きっぱなしだから明日確認してみる。
540 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:22:57 ] 著者名のつづりのミスもみつけられんとこ信用するな
541 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 01:49:29 ] >>535 ls -l `< xyz` なら期待通りの結果になるよ。 bash 依存の記法だったと記憶しているけど。
542 名前:539 mailto:sage [2007/04/05(木) 10:21:44 ] 入門UNIXシェルプログラミング(ソフトバンク株式会社、Bruce Blinn、初版) の87ページに確かに載っているな ---------- $ cat xyz # xyzファイルの中身を確認 abc nnn $ ls -l < xyz # xyzファイルを「標準入力」としてリダイレクトする ---------- ls (GNU coreutils) 5.97では動きませんでしたがええ。
543 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:53:34 ] リダイレクトのことで質問なんですが 中身がスペース一つのファイルsampleを cat test | sed -e 's/ / /' > test2 とするとtest2にスペース10個が出力されるので cat test | sed -e 's/ / /' > test とするとtestの中にはスペースが10個入っていると思うんですが、 中身を見てみると空になってしまいます。 一つのコマンドの中で同じファイルに対して入出力のリダイレクトを行うと 空になってしまうのはわかるんですが、今回の場合はどうしてうまくいかないのでしょうか?
544 名前:543 mailto:sage [2007/04/05(木) 12:55:16 ] すいません、上の例でのtestはsampleの間違いですorz
545 名前:543 mailto:sage [2007/04/05(木) 12:57:52 ] 何度もすいませんorz どうやら連続した半角スペースは一つにまとめられてしまうみたいで、 上の例のs/ / /はs/スペース1個/スペース10個/ってことです。
546 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:50:57 ] >>545 一部のOSのようにパイプラインを非同期にしか実装してない環境ならいざ知らず、 まともなOSではパイプラインの前後のプロセスは同時に実行されるので、 パイプラインに接続する一つのファイルを読み書きしようとすれば当然そうなる。
547 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 14:50:40 ] つまり上の例だと ・最初に書き込み用にファイルを開く、当然ファイルの中身は空になる。 ・catは空のファイルの中身を出力する ・空がsedに渡されるので当然空をファイルに書き込む という順番で処理が行われるんでしょうか?
548 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:14:56 ] ちょっと違うな。 cat test | sed -e 's/ / /' > test の場合、 シェルがtestを"w"で開いてからcatとsedを起動する筈だから、 catが起動された時点でtestは既に空の筈だ。 空の入力に対してcatは何も出力しないし、sedも同じように何も出力しない。 従って、空になるのはcatやsedが起動される前と言うことだ。 ちなみに、どうしても同じファイルに読み書きしたいなら sed -e 's/ / /' < test | tee test のようにしてしまえばいい。 これなら、シェルがtestを開いてからteeがtestを開こうとするので (unixの開きっ放しのファイルは削除できたように見えてもそれは見掛けだけ仕様に基づき) 無事に処理される筈だ。
549 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:27:54 ] まず最優先でリダイレクトのための処理が行われて、それから コマンドの処理が行われるんですね。わかりました。ありがとうございます。
550 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:02:21 ] なんか今一判っていない悪寒。
551 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 02:40:06 ] >>549 GNU sed 使ってるなら -i オプションつけとけ
552 名前:デフォルトの名無しさん [2007/04/07(土) 19:35:57 ] シェルを初めて組みます。 Cシェルで、自分のグローバルIPを取得して、そのIPをメールで送信するようなプログラムを 組みたいと思っております。 で、グローバルIPの取得の仕方が分からないのですが、 どのようにかけばよいのでしょうか? OSはRedHat10です。
553 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 20:07:14 ] シェルスクリプトのことをシェルゆーな。 Cシェルで書くな。 プライベートアドレス 10.x.x.x 172. {16-32} .x.x 192.168.x.x 割り当てられているIPアドレスは LANG=C /sbin/ifconfig |sed -n 's/inet addr:¥([^ ][^ ]*¥) .*/¥1/p' で取れるから、あとはawkでも使って該当しないものを除外すれば いいんじゃないか? と書いてから気づいたが、家のダイアルアップルータに繋がっている LinuxからグローバルIPアドレスを取ろうとするなら、Linuxにはプライ ベートIPアドレスしか割り当てられてない。取るべきはルータに付いてる グローバルIPアドレスになるから別の方法が必要だぞ。
554 名前:デフォルトの名無しさん [2007/04/07(土) 22:25:30 ] >>553 すいません、ありがとうございます。 何もわかってないんで^^; ずばり、そのとおりで、取得したいのはルータについてるグローバルIPです。。
555 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 22:42:16 ] >>554 ダイアルアップルータやモデムにはtelnetサーバが内蔵されていることがある。 叩くコマンドが分かれば、expectを使って取得できるかもしれない。 httpサーバを内蔵していることもあるが、こっちはずばりIPアドレスを確認する ページを持ってるかもね。
556 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 23:00:35 ] >>554 誰もおまいのルータの仕様を知っているやつはいないからな・・・ うちのFLASHWAVE 2040 M1ならID:PASS@ ルータのIP/doKeeping.htmlを wgetで取得してvar sIpAddress="*.*.*.*";の場所を取得すればわかる。
557 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 00:37:43 ] 何も考えずにメール出せば、大抵はReceived:にIPアドレスが自動的に書かれる。 書かれないならば、書いてくれるメールサーバを提供しているISPに乗り換える。
558 名前:537 mailto:sage [2007/04/11(水) 10:24:46 ] ソフトバンクさんからメールの返事が届きました。 正誤表も更新したみたいです。
559 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:36:15 ] alias定義で改行の前に入れる\にはどのような作用があるのでしょうか? csh でいろいろと試してみたところ、下のようにwhile文などが使えるようになりますが、 一方で、引数を扱ったりwhile文のネストをしたりすると正常に動作しなくなってしまいます。 alias loop '\ set count = 1\ while ( $count <= 5 )\ echo hoge\ @ count++\ end\ '
560 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:45:23 ] 未だだね。
561 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:46:29 ] あーいけね、>560は>558の話ね。 >>559 行末のバックスラッシュは改行文字をエスケープする。
562 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 13:19:26 ] >>561 「改行文字をエスケープする」の意味を具体的に教えて欲しいのです。 >>559 のコードで\+改行を空白に置き換えると動かなくなります。 妙な副作用がなぜ出るのかも謎です。
563 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:34:26 ] >>552 診断君とかにアクセスしてIP抜いてもらって それをパースするのはだめなんか?
564 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:36:33 ] ワンクリ詐欺サイトにアクセスすればIPアドレス教えてくれそうだな。
565 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:29:53 ] >>563 頻度にもよるけどあんま他人様のとこに頼るのもいかんと思う。 自前で取れるんならそうした方が優しいし確実。一応 ttp://info.ddo.jp/remote_addr.php とか使うとワンライナーでやれるけど。
566 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 12:59:30 ] >>562 シェルスクリプトにおける改行の意味を調べてみると良いよ。 alias loop 'set count = 1;while ( $count <= 5 );echo hoge;@ count++;end;'
567 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 05:02:58 ] >>566 while?
568 名前:デフォルトの名無しさん [2007/04/13(金) 21:22:17 ] 質問させてください。 以下のように、test-serverへ接続し、 date;hostname;whoamiを実行するスクリプトを書いてます。 date;hostname;whoamiの結果をリダイレクトし、 スクリプト本体があるサーバに保存したいのですが、 その場合、どう記述すれば良いでしょうか。 #/bin/bash HOST=test-server UNAME=root PASSWD=*** expect -c " set timeout 20 spawn telnet $HOST expect login:\ ; send \"$UNAME\r\" expect sword:\ ; send \"$PASSWD\r\" expect \"$\" ; send \"ls\r\" expect \"$\" ; send \"date;hostname;whoami\r\" expect \"$\" ; send \"exit\r\"
569 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 11:40:37 ] そのスクリプトの出力をリダイレクトすればいいのではなくて?
570 名前:568 mailto:sage [2007/04/17(火) 21:48:16 ] その方法が分からないのです。expect内部でリダイレクトすると 接続先にファイルが出来てしまうんじゃ無いでしょうか
571 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 23:45:47 ] >>570 にほんごよめますか?
572 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 00:08:52 ] ラッパー側のスクリプトの出力をリダイレクトしようとしても、 expectの中で起動したプロセスの出力はexpectが全部食っちゃうん じゃないの?
573 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:39:33 ] あるプログラムをバックグラウンド実行して、 そのプログラムが一定時間後に終了していなかったら終了させる、みたいなことはできますか? こんなイメージです。 #!/bin/sh /bin/hoge & # 数十分かかる。途中で固まるかもしれない。 sleep 3600 # 念のため一時間待ってみる [ hoge が終了していなかったら hogeをkillする。終了していたら無視 ] exit
574 名前:デフォルトの名無しさん mailto:age [2007/04/21(土) 18:41:17 ] あげ
575 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:50:35 ] >>573 こういう事? #!/bin/sh -x DURATION=3600 hoge & PID=$! echo ${PID} sleep ${DURATION} kill ${PID} exit
576 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:51:49 ] >>573 pid控えておいて、atコマンドで終了スクリプトを仕込むとか。
577 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 19:30:31 ] 一時間の間にpidが再利用されない保証があるなら。
578 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 19:44:35 ] kill する前に親プロセスの PID を確認すれば。
579 名前:デフォルトの名無しさん [2007/04/21(土) 20:11:19 ] データを 1バイトだけ 読み込むコマンドってなんだっけ?
580 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 22:21:18 ] >>579 head -c 1 ?
581 名前:573 mailto:age [2007/04/21(土) 22:39:07 ] >>575 こういうことです!ありがとうございます。 >>576 atd動いていないッス。。。 >>577 >>578 pidが再利用されない補償はもちろん無いです。 ググっていますがPPIDを確認をするコマンドが見あたらないorz $!や$$でPIDが取れるようなのでpsコマンドの結果から何とかしてみます。
582 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 17:22:43 ] waitか何かで子プロセスの終了待てなかったっけ?
583 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:14:45 ] >>573 pid=$! count=0 while [ $count -lt 60 ]; do sleep 60 kill -0 $pid || break count=`expr $count + 1` done [ $count -lt 60 ] || kill $pid
584 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:15:16 ] 待つよ。
585 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:16:01 ] むぅ、30秒差で… >>582 waitで待つよ。
586 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 11:19:01 ] >>583 kill -0 $pid ってどういう意味?
587 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 20:32:55 ] kill -0 $pid 2>/dev/null || break の方がベターだな。 >>586 man 2 kill The kill() system call sends the signal given by sig to pid, a process or a group of processes. The sig argument may be one of the signals speci- fied in sigaction(2) or it may be 0, in which case error checking is per- formed but no signal is actually sent. This can be used to check the validity of pid. プロセスが存在してそのプロセスにシグナルを送る権限があれば正常終了。 それ以外はエラー。つまり、プロセスの生存確認に使用できる。
588 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 20:58:56 ] >>587 なるほど。 日本語man読んでも意味がわかんなかったんだ ありがとう
589 名前:デフォルトの名無しさん [2007/04/27(金) 13:30:22 ] シェルブリッド
590 名前:デフォルトの名無しさん [2007/04/28(土) 16:07:15 ] ♪ア・ソ〜レ ア・チョン! ア・チョン! ア・チョン! チョン! チョン! バカ!
591 名前:デフォルトの名無しさん [2007/05/04(金) 00:27:06 ] a.txt 2 4 23 87 483 3 b.txt 89 34 111 8 3 97 とある場合 program a.txt b.txt と打てば 以下のようにに表示されるシェルスクリプトってできませぬか? 2+89=91 4+34=38 23+111=134 87+8=95 483+3=486 3+97=100
592 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 00:35:51 ] >>591 スクリプトにするまでもないが、 #!/bin/sh paste a.txt b.txt | awk '{ print $1 "+" $2 "=" $1 + $2}'
593 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 00:36:40 ] あああ、paste $* | awk 以下略
594 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 22:00:14 ] ああpasteって知らなんだサンキュー
595 名前:デフォルトの名無しさん [2007/05/10(木) 19:24:42 ] 自演さらしあげ
596 名前:デフォルトの名無しさん [2007/06/18(月) 22:07:54 ] 既存ファイルの一部のみ書き換える事ってできますか? (ファイル名変えずに) NHK,1 NTV,4 TBS,6 FTV,8 ANB,10 というテキストがあったとして sed 's/N/X/g' という操作をして XHK,1 XTV,4 TBS,6 FTV,8 AXB,10 としたいです。
597 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:23:39 ] 別のファイルに出力した後で、mvかcp
598 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:34:19 ] -i オプションあるならそれ使え
599 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 06:36:31 ] (mv file file.bak&& sed -e 's/N/X/g' >file) <file
600 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 06:47:14 ] sed -i 's/N/X/g' file
601 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:04:16 ] sed -i ってどんな機能??
602 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:23:41 ] 手元のsedにはないオプションだ。
603 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:47:04 ] なら perl 使っとけ。 perl -i -pe 's/N/X/g' file
604 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:36:49 ] edでいいんじゃね?
605 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:30:13 ] ファイルのある文字列を含む行と行の間を取得するにはどうしたらいいのでしょうか? 例えば「abc」「def」を含む行の間、2・3・4行目を取得をしたいです。 grepでやろうとしたのですが、どうしてもうまくいきません。。 abcaa aaaaa bbbbb ccccc defbb
606 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:36:36 ] >>605 sed -n '/abc/,/def/p' < text | sed '1d;$d' なんか冗長なのと、該当箇所が複数あると駄目だな。
607 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:37:59 ] パイプの後段を sed '/abc/d;/def/d' にすれば該当箇所が複数あってもOKかも。
608 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:47:05 ] >>605 sed -n '1,/abc/b; /def/q; p'
609 名前:605 mailto:sage [2007/06/27(水) 01:12:46 ] レスありがとうございます。 無理やりawkで冗長なものを作ろうとしてました。 もっと修行して出直します。
610 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:37:53 ] >>609 別にawkでいいんじゃね。ラクだし ↓複数箇所でも大丈夫 awk '/aaa/{f=1;next} /bbb/{f=0} f{print}'
611 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:03:01 ] つーかやり無理一行で作らんでも、perlとかで普通に作ればいいんじゃね。 冗長だろうがなんだろうが。
612 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:04:28 ] awkでがんばって一行で作ったのの速度と perlでシコシコださく書いたのの速度は どっちが速いですかね
613 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:11:24 ] 別に全然頑張ってない
614 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:19:38 ] awkで一行で書けるものがperlで一行で書けない理由は無い。
615 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:09:13 ] 一行に納める必要はないです。 バックリファレンスなどの特殊な機能を使わなければ 遅延評価DFAで動くawkは行数が増えても遅くなりません。 逆に頑張って一行で書いてもあんまり高速化しません。
616 名前:デフォルトの名無しさん [2007/07/04(水) 23:12:58 ] 九九の表を作るスクリプトなんですけど cshで@を使わないで書き直したらどうなりますか? #!/bin/csh -f echo " | 1 2 3 4 5 6 7 8 9" echo "--|------------------" foreach i (1 2 3 4 5 6 7 8 9) eaco -n " $i|" foreach j (1 2 3 4 5 6 7 8 9) @ seki = $i @ seki *= $j printf "%3d" $seki end echo "" end echo "--|------------------"
617 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:21:45 ] @を使わないならBourne Shellでやるようにexprを使えば?
618 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:25:05 ] >>617 Borne shellで書き換えは出来るんですけど 課題としてcshで@を使わないで書き直すように指示されてるんです
619 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:35:33 ] ばか?
620 名前:デフォルトの名無しさん [2007/07/05(木) 00:28:33 ] しつもん スイッチのポートとその先のPCのMACをSNMPで対応付けたいのですが、 #!/bin/bash while [MACアドレスがある限り];do snmpwalk -c コミュ IP .1.3.6.1.2.1.17.4.3.1.1 >aa snmpwalk -c コミュ IP .1.3.6.1.2.1.17.4.3.1.2 >bb snmpwalk -c コミュ IP .1.3.6.1.2.1.17.1.4.1.2 >cc snmpwalk -c コミュ IP .1.3.6.1.2.1.31.1.1.1.1 >dd grep MAC aa > mib grep mibの右側 bb >bridge grep bridgeの右側 cc >ifindex grep ifindexの右側 dd >port paste MAC,port >output.txt done <mac.txt みたいなたらい回ししか出来ないんですか? 関係ないけどどうして演算結果を変数に入れるのがあんなに変な形式なんだろう?
621 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:40:18 ] >>618 #!/bin/csh -f echo ' @を使わないことに何の意味があるの?' echo 'あんた馬鹿じゃねーの?'
622 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:02:45 ] >>618 Bourne Shellでやる「ように」と書いたのが見えませんでしたか? ・cshでも``記法は使えるでしょ? ・exprはBourne Shellの内部コマンドじゃないでしょ?
623 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:37:06 ] >>620 コマンド置換を山ほどネストすれば一時ファイルはもっと減るんじゃね? つかこの程度のことにbash使うな で、変な形式って?
624 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:53:44 ] 文字列+数値(たまに数値の無い行がある)の並んだファイルを置換したいです ○○○1 ××××200 △△ □□66 とか並んでるのを、 ○○○2 ××××201 △△ □□67 みたいに。 sedで左 >file1 sedで右 | sed -e "s/\([0-9][0-9]*\)/&+1/" | bc >file2 paste file1 file2 > file3 で解決かと思ったら、△△の行がbcで勝手に詰められて結果がずれてしまう… 私の頭ではこれ以上思いつきませんでした。助けて
625 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:56:27 ] awkでいいじゃん。
626 名前:赤帽勉強中 mailto:sage [2007/08/02(木) 21:45:16 ] ・lftpを使用してファイルアップロードと削除を行う(mirrorは使わない) ・アップロードと削除の対象ファイルはリストから読み込ませる って機能のスクリプトを作ろうとしているんですけど、 ファイル名をリストから読み込ませてのアップロードと削除がどうやれば良いのか。。。 どなたかlftpに詳しい方、アドバイスを下さいませ。(-∧-;) ナムナム
627 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:19:08 ] lftp使ったことないのでmanを見てみたが、manの範囲でできる。 実行するコマンドをテキストファイルに羅列して lftp -f そのファイル 標準出力からコマンドを食わせることができればきれいなんだけどな。 cat <<EOF > commands user hoge pass cd hoge EOF sed 's!^!put !' < put_file_names >> commands sed 's!^!del !' < del_file_names >> commands lftp -f commands とかそんな感じじゃね?
628 名前:赤帽勉強中 mailto:sage [2007/08/02(木) 23:10:38 ] >>627 レスありがとうございます♪おかげで何とかなりそうですよ。 実はmanを見たりググったりしていたんですが何じゃこりゃ?って感じで理解できていませんでした(汗 まだまだ全然勉強が足りませんですね。。。ヾ(´▽`;)ゝアセアセ