1 名前:1様 [2009/04/03(金) 22:17:43 ID:0qFlvOW9] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part4 : pc11.2ch.net/test/read.cgi/linux/1210999497/ Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/ Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/ Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
445 名前:login:Penguin mailto:sage [2009/11/06(金) 00:09:34 ID:eRT3M+Ha] >>443 なんでそんなことしたいの?
446 名前:login:Penguin [2009/11/06(金) 08:33:57 ID:mW6ePEE5] 小数点第三位くらいの数値を1000で割りたいのですが、bcで計算すると0.123456が.123456にされてしまって正しくrrdtoolに値を渡せなくて困っています。 どなたか対策をご存知の方がいらっしゃいましたらご教授頂けないでしょうか。
447 名前:login:Penguin mailto:sage [2009/11/06(金) 12:03:55 ID:eRT3M+Ha] >>446 sed 's/^\./0./'
448 名前:441 mailto:sage [2009/11/06(金) 19:41:15 ID:/t9QHrwg] >445 ctrl-r で、history のリストから検索して、 ctrl-e とすると、実行ではなく編集になりますよね、 あれがやりたかったんです。 ただ、その検索の部分を(例えば)grep で検索したり、 選ぶ部分をメニュー形式というか対話型にしたり、(その他もろもろ) 結果を実行ではなく、編集にしたい。 なので、シェルスクリプトとかで実行した結果をコマンドラインに 入れられないかなと思ったんです。 ちと無理だったかな。 >>442 ,444,445 どうもです。
449 名前:login:Penguin mailto:sage [2009/11/06(金) 19:45:45 ID:q+Z8sAfI] eshell使えば
450 名前:login:Penguin mailto:sage [2009/11/06(金) 19:46:49 ID:eRT3M+Ha] >>448 コマンドラインに戻す必要あるのかな。 そのアプリの中で編集させて実行しちゃえば?
451 名前:login:Penguin mailto:sage [2009/11/06(金) 21:42:41 ID:ebfIAKEi] >>448 bashなら、↓で実現できないかな? $ cat hoge.sh echo `date` >> ~/.bash_history $ sh hoge.sh $ history -r $ history | grep 2009 15 2009年 11月 6日 金曜日 21:37:38 JST 16 history | grep 2009 $ shopt -s histverify $ !15 2009年 11月 6日 金曜日 21:37:38 JST (histverifyがonだとカーソルはコマンドラインの行に位置したままで、編集可) # 嘘書いてるかもしれんので、間違ってたら指摘求む
452 名前:login:Penguin mailto:sage [2009/11/06(金) 21:57:06 ID:ebfIAKEi] 最初に HISTFILE=/tmp/.bash_history とかして一時ファイルにしたほうがよいかも
453 名前:login:Penguin mailto:sage [2009/11/06(金) 22:03:08 ID:CfRBFuVC] 質問。環境はbashです。 URLをテキストファイルに溜め込むスクリプトを作りたくて 弄りはじめたんですが、詰まってしまったので‥ 他力本願! 希望する結果: $echo ${URL} > url.txt $cat url.txt aaaa.co.jp bbbbaaa.com としたい。 #!/bin/bash NUM=0 while [ ${NUM} -lt 5 ] do URL=`zenity --entry "$1"` NUM=`expr ${NUM} + 1` done URLに複数の文字列を溜め込みたいのですがどうするべきでしょうか? ググってみると配列?というやり方があるようなのですが、まだ理解できません 教えてください。
454 名前:login:Penguin mailto:sage [2009/11/06(金) 22:17:20 ID:wQA60fmy] >>453 zenityって何のこっちゃ。配列を使うとこうなる。 $ URL=("foo" "bar") $ for url in ${URL[@]}; do echo ${url}; done foo bar …が、単に${URL}に空白区切りのURLを入れておいて、 sedなりtrなりを通して1行ずつ出力すれば良いだけの話ではないのか? $ URL="foo bar" $ echo ${URL} | sed 's; ;\n;g' foo bar $ echo ${URL} | tr ' ' '\n' foo bar
455 名前:login:Penguin mailto:sage [2009/11/06(金) 23:02:57 ID:CfRBFuVC] >>454 >zenityって何のこっちゃ。 なんか便利そうだなぁと思ってw zenity使わんでもいいんだけど、常に端末開いてるわけじゃないから操作的に楽かなぁと‥ んで、溜め込むURLは決まってるわけじゃなくて、ブックマーク的な感覚で使うつもり。 $ URL=("foo" "bar") は、わかったけど $ for url in ${URL[@]}; do echo ${url}; done は、${URL[@]} を 一行づつ url に代入して、それを一行づつ出してるってこと? ってことは、って考えた結果 while [ ${V_NUM} -lt 5 ] do URL=("${URL[@]}" `zenity --entry "$1"`) V_NUM=`expr ${V_NUM} + 1` done echo "${URL[@]}" a b c d e と順に打っていったら $ echo "${URL[@]}" a b c d e と返ってきた。 結果だけみると動作してるように見えるけど、合ってますか? なんとなく配列のイメージはわかったような気がする・‥ # sed とか 正規表現 とか覚えたら色々出来そうだ。。。と夢見てる段階w
456 名前:login:Penguin mailto:sage [2009/11/07(土) 00:24:25 ID:27rGR1FA] >>455 配列の話をしているからbash前提で話すが、 ・zenityが返す値(URL)を""でエスケープしておかないと、URLにスペースが含まれていたときにハマる。 ・単純に5回繰り返すだけならwhileとカウンタを使うよりもforを使ったほうがいい。 for i in {1..5}; do [処理]; done for i in `seq 5`; do [処理]; done
457 名前:login:Penguin mailto:sage [2009/11/07(土) 01:39:27 ID:CteOVE+c] >>456 なるほど。わざとスペースを入れて試してみました。 単純に5回繰り返すつもりなので、アドバイス通りにfor文でもやってみたいとおもいます。 >>454 >>456 どうもありがとうございました。
458 名前:login:Penguin mailto:sage [2009/11/11(水) 00:08:25 ID:ISVpZi0Z] bashの配列なのですが # ls お宝動画 有名女優の秘部大百科 というファイルがあって files=(`ls`) echo "${files[0]}" とすると「お宝動画」しか表示されませんよね これをちゃんとしたファイル名、空白を含む値を代入するには どうすればいいのでしょうか?
459 名前:login:Penguin mailto:sage [2009/11/11(水) 10:05:24 ID:FBEaA7LT] >>458 IFSがデフォで空白・タブ・改行になってると思うので IFSから空白を除く
460 名前:login:Penguin mailto:sage [2009/11/11(水) 13:32:06 ID:OlX5y2f2] そのファイル名の部分をもっと当たり障りの無いファイル名に変えて書けよww
461 名前:login:Penguin mailto:sage [2009/11/11(水) 19:26:47 ID:h7rzLTxQ] Bachで条件付バックアップスクリプトを組みたいのですが どう書いて良い物か分からなくなってしまったのでご教授 お願いします。 < やりたい事 > 任意のフォルダ配下でタイムスタンプがN日経過したものをtar.gzで 圧縮して、そのファイルを削除したい。 たとえば、/home配下に test1・test2・test3と言う3つのフォルダがあって 最終アクセス(ファイル操作)が30日以前のファイルを/home/backupに タイムスタンプ.tar.gz形式で保存し、バックアップ後そのファイルを削除する。 test1フォルダ内 -rw-rw-r-- 1 root root 10K 10月 09 00:00 /home/test1/hoge.txt -rw-rw-r-- 1 root root 10K 10月 10 00:00 /home/test1/higetxt tes21フォルダ内 -rw-rw-r-- 1 root root 10K 10月 11 00:00 /home/test2/hoge.txt -rw-rw-r-- 1 root root 10K 11月 01 00:00 /home/test2/higetxt test3フォルダ内 -rw-rw-r-- 1 root root 10K 11月 09 00:00 /home/test3/hoge.txt -rw-rw-r-- 1 root root 10K 11月 11 00:00 /home/test3/higetxt n日後のファイルを検索するところまで調べて下記のようなコマンドを 使うのだろうと思っているのですが、それ以降どうしてよいものか・・・・。 find /home -type f -daystart -mtime +30 |fgrep -v /. 長くなりましたがご教授お願いします。
462 名前:login:Penguin mailto:sage [2009/11/12(木) 00:26:46 ID:VaDsQREP] 教授は外出中です
463 名前:login:Penguin mailto:sage [2009/11/12(木) 00:42:44 ID:MDFmvAz9] バッハねぇ。
464 名前:login:Penguin mailto:sage [2009/11/12(木) 23:09:37 ID:ou+qWNnh] >>461 TARGET=`find /home -type f -daystart -mtime +30 |fgrep -v /. ` tar cvzf `date +%Y%m%d`.tar.gz $TARGET && rm $TARGET
465 名前:login:Penguin mailto:sage [2009/11/13(金) 10:24:58 ID:WdvDAtlm] >>464 有難う御座います。 やってみます!
466 名前:login:Penguin [2009/11/13(金) 11:55:23 ID:YoLOfEvP] test=/var/www/.htaccess-log という風にしても-logのみが認識されているようでうまく機能しません。 最初に.がある場合のファイルを変数に入れるにはどうすればいいのでしょうか?
467 名前:login:Penguin mailto:sage [2009/11/13(金) 11:58:11 ID:U8ZA18uC] $ test=/var/www/.htaccess-log $ echo $test /var/www/.htaccess-log $ 認識してるが。
468 名前:466 [2009/11/13(金) 12:09:11 ID:YoLOfEvP] >>467 すいません。 testの部分がtest-logでした。 $ test-log=/var/www/.htaccess-log $ echo $test-log -log となります。 申し訳ないです。
469 名前:login:Penguin mailto:sage [2009/11/13(金) 12:33:52 ID:veh/HZx5] >>468 変数名に-(ハイフン)は使えないと思ったが
470 名前:466 [2009/11/13(金) 12:45:36 ID:YoLOfEvP] >>469 すいません。 そうなんですか。 最近WEB関連からシェル叩くことがあって作ってたんですがシェルでは変数にハイフン使えないんですね。 修正したらうまくいきました。 ありがとうございます。
471 名前:login:Penguin mailto:sage [2009/11/13(金) 15:23:15 ID:mmBbeV5d] 区切りたいなら _ 使え。
472 名前:login:Penguin mailto:sage [2009/11/13(金) 20:07:30 ID:csbg7Gm/] >>466 >>5 >・思い通りに動かないときは、まずは sh -x でトレースしましょう。
473 名前:login:Penguin mailto:sage [2009/12/07(月) 12:06:33 ID:XdJnANaN] [ string ] と、[ -n string ] の違いについてお尋ねします。 [ $(cat /dev/null) ] が偽になるのに対して、[ -n $(cat /dev/null) ] は真になってしまうのですが、何が違うのでしょうか。 [ -z $(cat /dev/null) ] は真になるので、なんだか -nだけが仲間外れな気がします。
474 名前:login:Penguin mailto:sage [2009/12/07(月) 13:25:47 ID:OGpjrFHy] >>473 それだと $(cat /dev/null) が消えて引き数がなくなって [ ] [ -n ] [ -z ] になる。 なんでそういう挙動になるかは bash の test.c でも読んでもらうとして、 その挙動を避けるには [ "" ] [ -n "" ] [ -z "" ] にすればいい。
475 名前:473 mailto:sage [2009/12/07(月) 13:46:33 ID:5UzhKh29] >>474 なるほど納得です。 そう言えば変数が空文字列になってしまう場合を考慮してクォートしろと聞いた記憶があるような気がします。 素早いお返事ありがとうございました。ソースもあとで読んでおきます。
476 名前:login:Penguin [2009/12/13(日) 00:31:23 ID:h59G/AZL] よくダウンロードとかすると何%まで完了してるかみたいなのを 動的に出力するのってどうやんの?
477 名前:login:Penguin mailto:sage [2009/12/13(日) 01:45:44 ID:k2yGj3y5] 普通に wget でいいんじゃない?
478 名前:476 [2009/12/13(日) 02:23:19 ID:h59G/AZL] >>477 ダウンロードに限らず yumとかbuildするときに%を示す数値が動的に変わっていくじゃないですか。 あれ、どうやって実装してんのかなぁと。 誰かわかる?
479 名前:login:Penguin mailto:sage [2009/12/13(日) 02:27:41 ID:/qP8xinl] yumってpythonだっけか そういうライブラリがあるんでないの シェルスクリプトでやりたいならこういうのがある www.theiling.de/projects/bar.html
480 名前:login:Penguin mailto:sage [2009/12/13(日) 03:38:56 ID:s0ebrxv6] >>478 バックスペースを然るべき回数売って表示し直し
481 名前:login:Penguin mailto:sage [2009/12/13(日) 11:14:43 ID:45+rg1Ww] 画面制御の話題だったの? このスレ的には tput あたりでやるのが正しいのだろうか。
482 名前:login:Penguin mailto:sage [2009/12/13(日) 11:23:29 ID:1bGElD/p] >>478 $ man console_codes
483 名前:login:Penguin mailto:sage [2009/12/13(日) 11:50:06 ID:k2yGj3y5] このスレ的には dialog とか whiptail じゃないの。
484 名前:login:Penguin mailto:sage [2009/12/13(日) 18:57:54 ID:7EV0TAof] 普通の文章を書いた平文テキストをxtermに関連付けして開くと 実行権もないのにxtermがいくつも開いてフリーズします。 なぜですか?
485 名前:login:Penguin mailto:sage [2009/12/13(日) 19:25:45 ID:VEJMKGLd] 「関連付けして開く」ってどういう概念?
486 名前:login:Penguin mailto:sage [2009/12/13(日) 19:31:32 ID:7EV0TAof] 普通は表示とか端末で実行とか聞かれるので、右クリメニューに入れました
487 名前:login:Penguin mailto:sage [2009/12/13(日) 19:38:48 ID:8kXkcLfR] Ubuntu使ってるの?
488 名前:login:Penguin mailto:sage [2009/12/13(日) 22:54:17 ID:u+Xt7Oyd] >>486 ごめん。尋ねておいて悪いけど、 「関連付けして開く」や「右クリメニューに入れ」るってのが判らない。 なので助言できない。
489 名前:login:Penguin mailto:sage [2009/12/13(日) 22:58:13 ID:X8Bwu1bm] >>484 Windowsの関連づけの感覚? GNOMEであれば、プロパティから開くアプリ指定してるとかってことか? 試しにユーザーを新しいの作って再現するかどうか試してみたら? もし再現できなければ ~/.gconf* ~/.gnome* とか退避して削除してログインしなおしてみるとか。 内容からして、くだ質のほうがアドバイスもらえると思うよ。
490 名前:login:Penguin mailto:sage [2009/12/13(日) 23:54:09 ID:3DX9cdGt] >>484 「xterm を起動できるかどうか」は 「xterm を実行する権限があるかどうか」で決まることだから、 「平文テキストを実行する権限」とは関係ない。 $ xterm /tmp/hoge.txt とかやると、 No absolute path found for shell: /tmp/hoge.txt とかいったメッセージは出るけれど、xterm が起動する。 関連付け はよくわからないけれど、 テキストファイルをまとめて開こうとすれば、 ファイルの数と同じだけ xterm が一気に起動する ってことは想像できる。 CPUとか メモリ/swap とかが足りなければ、フリーズみたいな状況になるかもしれない。
491 名前:login:Penguin mailto:sage [2009/12/14(月) 00:20:50 ID:SmNokk3G] >>484 シェルスクリプトの話じゃないでしょう。 こっちで。 くだらねえ質問はここに書き込め! Part 179 pc11.2ch.net/test/read.cgi/linux/1257056891/ 自分の環境もちゃんと書くこと。 www12.atwiki.jp/linux2ch/pages/5.html#id_d2fb2105
492 名前:login:Penguin [2010/01/05(火) 20:34:00 ID:nuI9c99Q] bashで手軽にオブジェクト指向モドキする方法ってありませんか? とりあえず試みたのですが、スッキリしません。 #!/bin/bash gal(){ eval "$1"_name="$2" eval "$1"_age="$3" eval "$1"_sex="$4" } aisatsu(){ eval echo "私は\"\$"$1"_name"、\"\$"$1"_age"歳です。よろしく ね。" } hanasu(){ eval echo "\"\$"$1"_name\"に何の用?" } gal "yuka" "由佳" "16" "女" aisatsu "yuka" hanasu "yuka"
493 名前:login:Penguin mailto:sage [2010/01/05(火) 20:45:01 ID:kbriKfoG] >>492 emasaka.blog65.fc2.com/blog-entry-379.html
494 名前:login:Penguin mailto:sage [2010/01/05(火) 20:48:20 ID:nuI9c99Q] >>493 すごいものがあるんですね。 ありがとうございました。
495 名前:login:Penguin mailto:sage [2010/01/07(木) 18:16:37 ID:wAYEJTZp] テキストファイルで、指定した文字列を含む最初の行を開始位置とし、先とは別の 文字列を含む行が見つかるまでを削除するにはどうすれば良いでしょうか?
496 名前:login:Penguin mailto:sage [2010/01/07(木) 18:20:32 ID:D02SG01g] >>495 sed '/xxx/,/yyy/d'
497 名前:login:Penguin mailto:sage [2010/01/08(金) 10:03:28 ID:KgmcRvHm] >>495 ありがとうございます。 sedというのは強力なんですね。
498 名前:login:Penguin mailto:sage [2010/01/08(金) 12:52:11 ID:zGQxNXrb] >>497 これで「強力」ってどういう意味?
499 名前:login:Penguin mailto:sage [2010/01/08(金) 16:04:10 ID:/auv4CfE] >>498 文字/行削除程度しか知らない初心者にとっては、超強力。
500 名前:497 mailto:sage [2010/01/08(金) 23:16:45 ID:KgmcRvHm] shの変数を>>496 の/xxx/に使いたい場合についてお伺いします。 path=/aaa/bbb sed "/$path/,/yyy/d" の様にしても$pathが展開された時点で区切り文字がエスケープされておらず上手く いきません。 前処理が必要なのか、それともスマートな方法が用意されているのでしょうか?
501 名前:login:Penguin mailto:sage [2010/01/08(金) 23:33:25 ID:awvr0YeL] ファイル名はNUL文字以外なら全て使えるんだよね。 ということは、前処理の段階で区切り文字をエスケープする必要があるのかな。
502 名前:497 mailto:sage [2010/01/08(金) 23:38:17 ID:KgmcRvHm] やはり自前で前処理するわけですね。 sedで簡単に出来そうですね。
503 名前:497 mailto:sage [2010/01/08(金) 23:51:05 ID:KgmcRvHm] 下でできました。 #!/bin/sh -x var=/aaa/bbb esc=$(echo $var | sed -e 's/\//\\\//g') $()の代わりに``を使うとパイプがあるせいか上手くいきませんでした。 実際はどうなのでしょう? 教えて頂けると嬉しいです。
504 名前:login:Penguin mailto:sage [2010/01/08(金) 23:52:38 ID:r+fu5lRJ] sed "/\\$path/,/yyy/d" はどうなの?
505 名前:login:Penguin mailto:sage [2010/01/08(金) 23:53:13 ID:aqeo86VH] 区切り文字を変えるんだよ! sed '\@foo@,\@bar@d'
506 名前:497 mailto:sage [2010/01/09(土) 00:07:36 ID:WfSq+WCG] >>504 それだと$pathの先頭にのみ区切り文字がある場合にしか対応していないと思います。 >>505 そういうときに使うのですね。 なるほど。 ありがとうございました。
507 名前:login:Penguin mailto:sage [2010/01/10(日) 12:29:36 ID:jRBDc3XG] com1 | com2 | com3 の様なとき、どこかでエラーが起こった場合に、それを知ることはできないでしょうか? bash3.0以降だと${PIPESTATUS[@]}で可能なようですがshでなんとかならないかと。
508 名前:login:Penguin mailto:sage [2010/01/10(日) 12:37:23 ID:E5a795Pl] subshellを使って、 (( com1 判定)| com2 判定 )| com3 みたいな事を見た憶えがするけど、定かでない。
509 名前:初心者 mailto:zzhong33@yahoo.co.jp [2010/01/13(水) 23:30:52 ID:9IUNZoL1] run.shファイルの中で、script_file.shをsourceした場合。 sourceされているscript_fileの中でscript_file自身の絶対パスを得る方法を調べています。 bashの場合はscript_fileの中で$BASH_SOURCEから得られるが、他のシェル(zsh/tcsh/ksh)でscript_file.shのパスを得られる方法を 教えていただけませんか? >>>>>>>>>>>>>>>>>>>>>> script_file.shファイルのある場所 /path/to/script_file.sh >>>>>>>>>>>>>>>>>>>>>> 実行例: %./run.sh 期待結果: /path/to/ ファイル <run.sh>の中身 ------------- #!/bin/(sh/zsh/tcsh...) source $path/script_file.sh ------------- ファイル script_file: ------------- script_file_path=`******` echo $script_file_path; -------------
510 名前:login:Penguin mailto:sage [2010/01/13(水) 23:53:55 ID:rEuhDc/f] >>509 機能知らない分際で答えるとさ 単純に呼ぶんだからさ source "$path/script_file.sh" "$path/script_file.sh" とか引数として渡してecho $1とかしても できちゃったりはするね
511 名前:login:Penguin mailto:sage [2010/01/13(水) 23:59:57 ID:rEuhDc/f] 期待結果は/path/to/だったかorz ならsource "$path/script_file.sh" "$path" でまぁできるといえばできてるけど
512 名前:login:Penguin mailto:sage [2010/01/14(木) 00:01:40 ID:4xSyV+UX] /が抜けてたねorz
513 名前:login:Penguin mailto:sage [2010/01/14(木) 03:10:55 ID:4xSyV+UX] >>507 気になったので書いてみた >>508 氏が言ってるようにもっと楽にできるんだろうけど ちなみに頭悪いので間違ってる可能性ありと 使い物になってないと思うから 一応動いてるかも程度
514 名前:login:Penguin mailto:sage [2010/01/14(木) 03:12:28 ID:4xSyV+UX] function perror(){ stdout=`mktemp`;stdout2=`mktemp` first=on until test 1 -eq $# #引数一個の場合は何もしないので注意 do if test $first = on then first=off $1 1>$stdout 2>/dev/null judge=$? fi if test $judge -eq 0 then if ! test 2 -eq $# then $2<$stdout 1>$stdout2 2>/dev/null judge=$? shift else #最後は標準出力へ $2<$stdout #最後のcommandの失敗は判定してないので注意 shift fi else echo "$1" error 1>&2 break fi stdout_hold=$stdout # 入れ替え stdout=$stdout2 stdout2=$stdout_hold done rm $stdout $stdout2;unset stdout stdout2 stdout_hold first judge }
515 名前:login:Penguin mailto:sage [2010/01/14(木) 03:15:58 ID:4xSyV+UX] perror 'ls /usr/bin' 'sed 's/^/test/g'' 'grep gcc' less perror 'ls /usr/bin' 'sed 's/^/test/g'' 'tar xf' less まぁ一応動いてるのかな!?
516 名前:login:Penguin mailto:sage [2010/01/14(木) 17:27:09 ID:FVM4x3d9] sed -e '$-3,$d' file とすると sed: -e expression #1, char 2: unknown command: `-' というエラーがでます。 versionは4.1.5ですが上記の使い方間違ってますか?
517 名前:login:Penguin mailto:sage [2010/01/14(木) 17:55:26 ID:EAAIjJ3h] vi じゃないんだからそんな指定できないよ
518 名前:login:Penguin mailto:sage [2010/01/14(木) 22:28:16 ID:dyjWaACs] >>507 エラーが起こったかどうか *見えればいい* ってだけならこんなやりかたも。 (com1 ; echo $?>/tmp/test.log) | (com2 ; echo $?>>/tmp/test.log) | 略 (com1 ; xmessage com1:$?&) | (com2 ; xmessage com2:$?&) | 略
519 名前:login:Penguin mailto:sage [2010/01/15(金) 09:27:35 ID:vHlv+w15] >>516 つhead -n -4 file
520 名前:login:Penguin mailto:sage [2010/01/15(金) 10:37:34 ID:0e3bcUwp] >>519 -nの値に負の数を与えられるんですね。
521 名前:login:Penguin mailto:sage [2010/01/15(金) 11:44:19 ID:exz65txq] ダブルクォーテーションで囲まれた文字列を抜き出すってどうやればいいんだ? cutでもexprでも俺には無理だった、絶対サクッとできるはずなのに悔しすぎる…
522 名前:login:Penguin mailto:sage [2010/01/15(金) 12:29:58 ID:n61dnfY7] grep -o '"[^"]*"'
523 名前:login:Penguin mailto:sage [2010/01/15(金) 13:14:40 ID:exz65txq] >>522 今日一日崇めさせてくれ
524 名前:login:Penguin mailto:sage [2010/01/15(金) 20:34:53 ID:cwTkNqT3] 1日限定かい。
525 名前:login:Penguin mailto:sage [2010/02/07(日) 15:35:53 ID:lbKDrfi6] $ df -h /tmp Filesystem Size Used Avail Use% マウント位置 tempfs 512M 89M 424M 18% /tmp の%の前の数字(ここでは18)だけ取り出したいんだけど、どうすればよいですか?
526 名前:login:Penguin mailto:sage [2010/02/07(日) 15:58:04 ID:vkq5/P4Z] awk使う
527 名前:login:Penguin mailto:sage [2010/02/07(日) 16:03:00 ID:U7v7s3zM] とても安直な方法なので最適解には程遠いと思いますが df -P /tmp | grep '/tmp$' | awk '{print $5;}' | sed 's/%$//'
528 名前:login:Penguin mailto:sage [2010/02/07(日) 16:06:14 ID:lbKDrfi6] >>526 ,527 ありがとう。
529 名前:526 mailto:sage [2010/02/07(日) 19:06:47 ID:dchTEc3Z] >>527 おまwww df -h /tmp | awk '/\/tmp/ { print gensub("%", "", "", $5) }'
530 名前:login:Penguin mailto:sage [2010/02/07(日) 19:16:50 ID:U7v7s3zM] いやそれくらい知ってる
531 名前:login:Penguin mailto:sage [2010/02/07(日) 19:30:22 ID:Fd1qGpin] 複数行のキーワードをfgrepする手はないスか? キーワードの行数は不定。以下例では仮に2行とします。 $ cat -n text 1 abcdefg******* 2 [hijklmn-z] 3 abcdefg******* $ fgrep 'abcdefg*******なんとか[hijklmn-z]' text text:1:abcdefg******* text:2:[hijklmn-z] 1と2行目のペアはヒットするが、3行目がヒットしてはいけない。
532 名前:531 mailto:sage [2010/02/07(日) 19:32:00 ID:Fd1qGpin] ああっと。 上の検索コマンドはgrepファミリーでなくても良いですが、perlは駄目です。
533 名前:login:Penguin mailto:sage [2010/02/07(日) 19:58:16 ID:KEZIcPfj] 宿題は自分でやれよ
534 名前:login:Penguin mailto:sage [2010/02/07(日) 21:03:26 ID:U7v7s3zM] #!/bin/bash AWKFILE="/tmp/$0.$$" trap "rm -f ${AWKFILE}" 0 KV=0 echo "BEGIN{s=0;h=\"\"};" > "${AWKFILE}" for keyword in $*; do echo "/${keyword}/{if (s==${KV}){s=s+1;h=h NR \"\\t\" \$0 \"\\n\";} else {s=0;h=\"\"}};" KV=`expr ${KV} + 1` done >> "${AWKFILE}" echo "{if (s==$#){print h;s=0;h=\"\";}};" >> "${AWKFILE}" awk -f "${AWKFILE}"
535 名前:login:Penguin mailto:sage [2010/02/07(日) 21:24:02 ID:U7v7s3zM] いろいろ残念な部分があるけど、そこは使う人が直してね
536 名前:login:Penguin mailto:sage [2010/02/07(日) 21:36:26 ID:5ZhdKpPZ] >>534 んー。やっぱりスクリプト生成みたいになりますか。 私以外の人が考えてもすっきり行かない事が解りました。ありがとうございます。 >>533 この手の宿題を出す学校はあまり無いんじゃないかな。
537 名前:login:Penguin mailto:sage [2010/02/07(日) 21:41:15 ID:U7v7s3zM] 自分でできない部分だけ聞きなよ
538 名前:login:Penguin mailto:sage [2010/02/07(日) 21:51:00 ID:UYJWIskO] >>536 質問に答えようとしてない奴の発言にはいちいち反応するな。 「教えてくれ」ってやつと「宿題は自分でやれ」ってやつは 「歩み寄る可能性がない」からスルーしたほうがいい。 専ブラ使える環境なら、NGワードに「宿題」って単語を入れておいたほうがいいよ。
539 名前:login:Penguin mailto:sage [2010/02/07(日) 22:05:12 ID:U7v7s3zM] >>531 はいろいろ引っかかる部分があるから正直俺も最初は回答しようかどうか迷ったぞ 返事を聞いて>>538 も出てああやっぱりかと思ったし... と戯言はここまでにしとく
540 名前:login:Penguin mailto:sage [2010/02/07(日) 22:36:33 ID:5ZhdKpPZ] >>537 >自分でできない部分だけ聞きなよ すっきりと実現できなかったので尋きました。というか、 往々にしてこの手のことを実現すると車輪の再発明になってしまってる事が多い。 なので、他の人も決定的な車輪を持ちあわせていないという情報はとても大切で、 有難く思っています。
541 名前:login:Penguin mailto:sage [2010/02/07(日) 22:44:49 ID:qrQKR8fu] 典型的なゆとり脳というか なんでこんな上から目線なんだろ そういうのは自分で書いたの張ってから言えよ
542 名前:login:Penguin mailto:sage [2010/02/07(日) 22:46:48 ID:U7v7s3zM] >>540 実現できたなら実現方法そのものを聞く必要はない 実現方法を提示してより良くするにはどこを直せばいいか聞けばいい 他人のコストは格段に違うだろうし、回答も違ったものになる というかお前>>526 だろ?
543 名前:526 mailto:sage [2010/02/07(日) 23:05:32 ID:sirvd3yi] こらこらw 静観してる俺まで巻き込むなよ
544 名前:login:Penguin mailto:sage [2010/02/07(日) 23:09:51 ID:fkJC7wtF] >>542 そうですね。その点は気をつけたいと思います。 >というかお前>>526 だろ? いや違う。 むしろ、>>529 (526)にしろあなたにしろ"/tmp"をマッチさせている時点で、要求条件から逸脱していると思っている。
545 名前:login:Penguin mailto:sage [2010/02/07(日) 23:30:09 ID:U7v7s3zM] ID変えながら大変ですね。元に戻せないの?