5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

シェルスクリプト相談室

1 :デフォルトの名無しさん:2005/04/04(月) 03:43:03
シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。 


2 :デフォルトの名無しさん:2005/04/04(月) 04:03:33
2

3 :デフォルトの名無しさん:2005/04/04(月) 05:08:16
お楽しみいただいた当スレッドもただいまをもちまして終了いたします。
1112553783 シェルスクリプト相談室です。

4 :デフォルトの名無しさん:2005/04/04(月) 06:04:38
連番エロCGをスクリプトで一発ダウンの俺様が4様GETですよと。

最近本気で自動巡回も作ろうかと思案中です。チェックするのもマンドクセ。

5 :デフォルトの名無しさん:2005/04/04(月) 09:52:54
UNIX板逝けよ

6 :デフォルトの名無しさん:2005/04/04(月) 10:29:05
>>5
シェルスクリプトはunixだけじゃないぞ


7 :デフォルトの名無しさん:2005/04/04(月) 12:16:13
いまだにcshを使っていますが何か?

8 :デフォルトの名無しさん:2005/04/04(月) 15:47:53
cshじゃなくて今のトレンドは何ですか?

9 :デフォルトの名無しさん:2005/04/04(月) 15:49:05
bash

10 :デフォルトの名無しさん:2005/04/04(月) 15:49:12
bash

11 :デフォルトの名無しさん:2005/04/04(月) 15:52:03
          ,,..--―-、 
         /, -----、.ヽ,     / ̄ ̄ ̄ ̄ ̄ ̄ ̄
         |  i_,,,,_  __゙l |    |   bash!
         ,!、i'゙-‐-: '-、|/   /  ______
        /'') ..., '‐-‐、.j     ̄ ̄
        / ,‐!::...`'''''''`ノ
      _,,,l ;! ::|ヽ、二 イ
   , -‐'゙゛ i::..  | .ヽ/;ヽj!`‐-、_
   l     ノ::. .:|、 .ヽ,:ヽ|  <゛~ヽ、
 

    ⌒ ⌒ ⌒
   _⌒ ⌒ ⌒__
  /:::::Λ_Λ:::::::::::::::/
 /::::::(∩;´Д`)∩ :::::/
/:::::::(  >>1  /::::/  チャラッチャラッチャーン

12 :デフォルトの名無しさん:2005/04/04(月) 19:11:51
ワロタ

13 :デフォルトの名無しさん:2005/04/05(火) 00:48:46
dsh


14 :デフォルトの名無しさん:2005/04/05(火) 02:00:34
>>7「ところで海原先生、UNIXにはシェルが欠かせませんが、いったいどんなシェルが一番流行なんでしょうか?」
>>8「それは私も知りたいですな!シェルを極め尽くした海原先生なら、その答えをお出しになれるんじゃないでしょうか!」
海原「さよう‥どれが一番二番と順位はつけられんが、五本の指に入るものをあげると‥」
「まずBourne Shell、それもXPG4のBourne Shellだな」
「csh、ksh、tcsh、ash、まあ、このあたりが間違いのない本道というところだが‥」
「gnuのbashは別格だし、debianのbash、dashも面白い。emacsをシェルで使うのも捨てがたいな」
>>9「なるほど、どれもこれも聞いただけでよだれが出そうですわい」
>>10「しかし同じシェルでもピンからキリまであるようで、海原先生は何でも飛び切り上等のシェルを使っておられるからなあ」
山杉「お若い方などはいかがです、どんなシェルがお好きですかな?」
山岡「今まで使ったshellの中ではzshが一番使いやすかった‥」
山杉「は?zsh?」
山岡「そうzsh」
海原「うわあっはっはっはっは!」
「だからシェルのわからぬUnixヲタだと言うんだッ、zshだと、馬鹿も休み休み言え!」
山岡「と言うからには、使ったことはあるんだろうな」
海原「誰がそんなシェルを使うか、無駄な機能だらけのシェルなど使ったら、10分で済む事が1時間かかるわ!」
>>11「まったく聞いただけでジンマシンが出ますよ」
>>12「最高のシェルを聞いているときにzshなんて、気分がだいなしよ」
>>13「Unixヲタは哀れなもんだ」
海原「いい恥さらしだな、自分の特殊な趣味をさらしおって!」


15 :デフォルトの名無しさん:2005/04/05(火) 03:11:24 ?
zsh

16 :デフォルトの名無しさん:2005/04/05(火) 11:54:16
zsh って実は Windows 版もあるんだよな(Cygwin ではなく)。

17 :デフォルトの名無しさん:2005/04/05(火) 15:54:28
シェルスクリプトならbsh、プロンプトならcshの方がいいなぁ。

18 :デフォルトの名無しさん:2005/04/05(火) 17:03:48
>>14
確かに鯖の話だな

bash以外シェル使った記憶ねぇな

19 :デフォルトの名無しさん:2005/04/09(土) 10:09:37
>>14
面白いぞ!
久々に和炉他


20 :デフォルトの名無しさん:2005/04/09(土) 10:14:10
>>14
ということは幻のzshとか出てくるのか?

21 :デフォルトの名無しさん:2005/04/10(日) 05:29:46
ls > /dev/null
の> /dev/nullってどういう効能があるのですか?

22 :デフォルトの名無しさん:2005/04/10(日) 05:58:09 ?
シェルが fork(2) して 標準出力を /dev/null に dup(2) して ls(1) を exec(2) してる

23 :デフォルトの名無しさん:2005/04/10(日) 06:17:35
さっぱりわからないのですが

24 :デフォルトの名無しさん:2005/04/10(日) 06:37:15
各コマンドを調べりゃいいだろ

25 :デフォルトの名無しさん:2005/04/10(日) 09:55:50
システムコールをコマンドと言っちゃう奴って

26 :デフォルトの名無しさん:2005/04/11(月) 00:22:14
田畑「国際シェル会議ですって!?」
花村「何なのよそれ!」
ブラック「文字通りシェルに関する色々な問題を国際的なレベルで検討しようとする会でして‥」
花村「シェルに関する問題って何よ?」
ブラック「ですから例えば、bashとzshとどちらがいいかとか‥」
花村「そんな問題を大勢集まって議論する訳?」
ブラック「今度東京で開かれる会議には全世界75か国から300人以上の委員が集まります」
田畑「あっきれた!なんてヲタが多いの!」
ブラック「そんなこと仰いますが、シェルてえものは一番簡単でしかもいろいろと奥が深いんでゲスよ」
富井「しかし驚いたなあ、そんな会議があるなんて!」
谷村「一度のぞいてみる価値はあるね」

記者A「あの‥さっきのシェルの件だけどね‥」
 「bash使ってるけど、僕はいつも.bashrcでsetenvを定義してるよ」
ブラック「ええっ本当ですか!ありがたい、日本にもsetenvファンがいてくれた」
記者B「setenvなんて邪道だよ。環境変数ってのはシェル変数から取り込むの
がいいんで、その場で定義するような構文はダサイよ」
記者A「そんなことはない。むしろシェル変数と環境変数の使い分けが曖昧な
のがBシェル系の悪いところだろう」
記者C「Cシェル使えばCに似た構文になるだろ」

花村「あら、Cシェル使ったら標準エラーのリダイレクトが大変じゃない」
記者C「標準出力も標準エラーも同じファイルにリダイレクトすればいいじゃないか」
田畑「わあ嫌だ、リダイレクトはファイルデスクリプタごとに定義、これが鉄則よ」
富井「田畑くんの言う通り、そしてexec 2> /dev/nullするのが一番いい」
田畑「わあ厨臭い!」
富井「厨ですみませんね!」


27 :デフォルトの名無しさん:2005/04/11(月) 00:22:48
谷村「やはりkshの、EDITOR=viでいきたいね」
記者D「僕は、shのESC補完が好きで」
記者C「俺はcshが」
花村「きゃあ変態!」
田畑「シェルの楽しさを知らないのね」
記者C「BSD系のデフォルトだぞ。そんな決めつけ方はないだろう!」
ブラック「いやあけっこうけっこう!なかなか良ござんした」
  「皆さんもなかなかシェルにはうるさいじゃありませんか」
記者B「‥結構主張するよね、みんな」
記者A「やっぱり身近なアプリだからね」
ブラック「いかがでゲス、皆さんもISCに参加しませんか?」
山岡「じゃ、どうせなら我々の身の周りの人のシェルに対する意見も聞いて回ったら?」
栗田「面白そう!」


28 :デフォルトの名無しさん:2005/04/11(月) 00:23:14
社主「なに、シェル?私はごく普通のシェルだよ」
栗田「ごく普通のといいますと?」
社主「bashにomaemonaパッチを当てたものだよ」
山岡「omaemonaパッチ?ごく普通とは思えませんが‥」
社主「どうしてだね?omaemonaパッチを当てていない2chネラなんて考えられんだろうが‥」
山岡「こりゃ、大原社主もISCに参加あるべきだな」
栗田「立派にその資格があるわ」

板山「よくぞこの私に聞きに来てくれたわい、私はシェルではずいぶん苦労した」
山岡「へえ板山社長が‥」栗田「人は見かけに寄らないわね」
板山「私はシェルのプロンプトがいつも同じってのが気に入らなくてね、
毎回変化するプロンプトを作ったんだ」
(dotfiles.comにあるモーヲタ製.zshrcを見せる)
板山「ね、こういろいろなプロンプトって楽しいだろう!」
栗田「まあ面白い!」山岡「これは板山社長もISCに入会だな」

陶人「これがわしの手製のシェルだ」
栗田「わあ可愛らしい!」山岡「staticリンクしてもフロッピー1枚に余裕で入る大きさだね」
陶人「ふっふ、領子がレスキュー用のシェルが欲しいと言ったので作ってやったんじゃよ」
領子「陶人くんの作ってくれたシェルで作業すると、復旧し易いのよねぇ」
山岡「‥あほらし‥よし、これをバンドルした1FDLinuxを売った金で、なにか
うまいものを買いに行こう」
栗田「唐山先生もISCに入会ね」


29 :デフォルトの名無しさん:2005/04/11(月) 00:23:45
司会「ただ今から「国際シェル会議」日本大会を開きます」
会長「シェルはアプリの中でも一番基本なものであります。しかし単純だからこそ奥が深く難しい」
「本大会はシェルに関する諸問題を議論し尽くしたいと思います」
「世界の平和はシェルから、を合い言葉に、さあ始めましょう!」
三谷「実は僕はzsh派でね」
花村「困っちゃった、私、bashし使ったことないのよお‥」
田畑「さあ大変、徹夜しなきゃ」
司会「まず、フランスのフリット氏に、シェルの設定の仕方についての中間発表をお願いしましょう」
フリット「シェルを設定する際の永遠の課題は、どのファイルで何の設定をするかということであります」
  「設定項目毎にファイルを分けるのもみっともないし‥」
  「といって、1ファイルに全部の設定をするのも下品です」
  「これはあるアメリカ人の例です、アルファベット名のファイルを作っ
てrcファイル中で順番に読み込むようにして‥」
  「コマンド名のアルファベット順に対応するファイルに書いていくやり方もあります」
会場(ブーブー)


会場「今の最後の設定方法は許せない!あんなやりかたでは、ログインシェル
もただの対話式シェルも関係なくなってしまう」
会場「私は環境変数は、.zshenvに、zsh固有の定義は.zshrcに、ログインシェル用
の設定は.zlogin、ttyの設定やBシェル系でも使える設定などは.zprofile
で設定します。こうするとメンテナンスや移行が容易になる」
会場「それは、私たちbashユーザーには不可能だ。シェルはzshだけではないことをお忘れなく」
会場「デフォルトの設定が十分なら、どのファイルで何を設定するとか心配しないですむんだ!」
会場「ちょっと待って、デフォルト設定がいいのか悪いのかは別の問題だ!」

会場「私はaliasでc="LANG=C LC_ALL=C"と設定しています」
「英語ロケールでアプリを起動するときは、c appで起動するだけなので最高です」
栗田「みんなすごいわ、ケンケンガクガクねっ」



30 :デフォルトの名無しさん:2005/04/11(月) 00:24:13
司会「さて、シェルの設定の仕方についてはこれくらいにして‥」
「次はzshがいいかbashがいいか、議論したいと思います」
「それでは、日本におけるzshとbashの実状についてブラック委員から報告して頂きましょう」
ブラック「快楽亭ブラックでございます。さて私は日本に来て以来あちこちで
調べた結果、日本ではシェルといえばbashのことでありまして、zshは厨
以外にはほとんど普及しておりませんでゲス」
会場「bashだと、スクリプトでよく使われている/bin/shと互換性があるから、
シェルスクリプトの勉強がし易くて、その分使い勝手が良いわ」
会場「日本人がbashを好むのは、シェルの名前が、米大統領ブッシュに似ているからであります」
「いわば、敗戦コンプレックスに強く訴えるのであります」
会場「拡張性の高さがzshの良さだっ!」
会場「しかし問題があります。設定が難しい。manも項目毎に11種類もあるし‥」
花村「私もそうなんです!誰か、設定のコツを教えてくださいっ!」
「‥あら、私、思わず 興奮しちゃって‥」
会場「あれこれいっぺんに設定すると失敗するんですよ、1つ1つ試していくことです」
会場「最初の設定を最小にして、使いながら気にいった機能を設定していくといい」

山岡「拡張性の高さなら、こんなシェルがあるよ」
「pythonのインタラクティブ版、ipython‥」
花村「pythonをシェルとして使えるのか!」
山岡「一番の利点は、ログをそのままpythonプログラムにもできることだね」
ブラック「ただ今のシェルは、bashともzshとも違います」
  「これからbashとzshの他に、このシェルも論議の対象に加えることを提案します!」
会場「異議なし!」「賛成!」
司会「それでは、ターミナルは何をや使うべきかを論議する前に、皆さんそれ
ぞれ好きなシェルをコンパイルしてインストールしましょう」
会場「異議なーし!」「インストールしましょう!」
花村「楽しい会議ねえ」
田畑「全然結論を出さないところが、犯罪的だけど‥」
山岡「結論は各々が自分で出せばいいんじゃないの」



31 :デフォルトの名無しさん:2005/04/11(月) 06:10:42
長すぎ

32 :デフォルトの名無しさん:2005/04/11(月) 09:04:13
>>26-30
お前、文才ありすぎw
しかも、おもろい。

シェルを知ってるようだしな。
しっかし、会話の最初にもあったけどシェル変数と環境変数って
なんか、ぱっとせんなぁ。


33 :デフォルトの名無しさん:2005/04/11(月) 16:07:43
…質問して良いのかな?

ファイルを読み込んで、各行の先頭文字を判定し、コメント文でなければ表示
をするというものを作っています。現在、以下のようにして判定しているので
すが、これでは、「空行があるとファイルはそこで終わり」だと判断されてし
まい、最後までいってくれません。全行を見るためには、どう書けば良いので
しょうか?bsh使いです。

while read KEY
do
#判定
done < test.dat

お願いします。

34 :デフォルトの名無しさん:2005/04/11(月) 18:06:01
>>33
シェルスクリプト総合 その1
http://pc8.2ch.net/test/read.cgi/unix/1101820646/

35 :デフォルトの名無しさん:2005/04/11(月) 21:12:58
shはなんであんなにキモイんですか?

36 :デフォルトの名無しさん:2005/04/11(月) 21:40:16
>>33
判定がおかしいんじゃないの?
#判定 の部分を、echo $keyに変えてみ。
それ以前に、
grep -v "^#" < input.txt
でええやん。(行頭文字「#」がコメント開始の場合)



37 :デフォルトの名無しさん:2005/04/11(月) 21:53:09
>>35
けっこー美しいと思うおいらは変態でつか?(゚◇゚;      

38 :デフォルトの名無しさん:2005/04/11(月) 22:22:30
UNIX使ってるやつがキモイから

39 :デフォルトの名無しさん:2005/04/11(月) 23:18:10
CreateGameー陸海空オンラインー
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm
2chスレ
http://game10.2ch.net/test/read.cgi/mmominor/1109935948/

ただ今、即戦力募集中!歴史に残るMMOを作ってみないか!!

40 :デフォルトの名無しさん:2005/04/11(月) 23:37:30
>>26-30
海原と山岡のシェル対決キボンヌ

41 :デフォルトの名無しさん:2005/04/12(火) 01:05:20
究極シェルと至高シェル対決キボン


42 :33:2005/04/12(火) 08:24:26
>>36

>>34氏の誘導先で、自己解決できました。
自己解決というか、何もコードは変えていないのですが意図する結果を出すようになりました。
(それはそれで可笑しいのですが…)

> grep -v "^#" < input.txt
>でええやん。(行頭文字「#」がコメント開始の場合)
シェルスクリプト勉強中の身でして、「caseで一行ずつ判定させてみよう」と
思い立って、作ってみたものなのです。

ありがとうございました。


43 :デフォルトの名無しさん:2005/04/14(木) 02:01:50
質問させて下さい。

シェルスクリプトからPHPを呼び出す際、
/usr/bin/php /home/id/public_html/test.php
↑の様に普通に呼び出すと問題ないのですが、

↓の様に、引数付きで呼び出すと正しく認識してくれません…
/usr/bin/php /home/id/public_html/test.php?mode=1

シェルスクリプトから引数付きでPHPを呼び出すにはどうしたらよいのでしょうか?

44 :デフォルトの名無しさん:2005/04/14(木) 10:54:18
>正しく認識してくれません
そりゃそうだ。
そのままではシェルからはtest.php?mode=1というファイルを探しに行ってしまう。
私ゃphpは知らんが、コマンドライン引き数として渡せばいいのなら
/.../test.php mode=1
でいいかと。
そうでないなら標準入力? cgiに詳しい人の降臨待ちかな。

45 :43:2005/04/15(金) 07:36:31
>>44
なるほど、そうですよね。
シェルスクリプトってDOSでいうバッチファイルみたいなもんなんですよね…
なんだかおバカな質問してしまってました。
どうもありがとうございました。

46 :デフォルトの名無しさん:2005/04/18(月) 22:25:35
Cygwin上のbashでスクリプトを組んでいるのですが教えてください
あるデータ
1,2,3 abc
があってこれをカンマを区切り文字として
それぞれを変数に代入したいのですが、どうやればいいんでしょうか

DATA="123,456,789 abc"
set -- ${DATA}
for i in $@; do
echo $i
done
上の様にやると
123,456,789
abc
と空白で区切られてしまいます

setコマンドで読み込む時に区切り文字は指定できないんでしょうか
IFS変数をいじってみたけどダメでした
あるいは他の方法(コマンド)があるんでしょうか


47 :デフォルトの名無しさん:2005/04/18(月) 22:47:48
awkでやれば?
それよりもUNIX板で聞いた方が確実。

48 :デフォルトの名無しさん:2005/04/18(月) 22:53:12
>>46
$ IFS=, ; for i in "$*" ; do echo $i ; done
123 345 678 abc

$ IFS=, ; for i in $* ; do echo $i ; done
123
345
678
abc


49 :デフォルトの名無しさん:2005/04/18(月) 22:55:05
>>26-30 ワロタ

50 :デフォルトの名無しさん:2005/04/18(月) 23:06:22
「シェルの比較」はスレ違いだな

51 :デフォルトの名無しさん:2005/04/18(月) 23:34:18
>>47
>>48
アドバイスありがとうございます
なんとかできました

52 :デフォルトの名無しさん:2005/05/22(日) 13:10:43
tcshなんてヽ( ・∀・)ノ●ウンコー

53 :デフォルトの名無しさん:2005/05/22(日) 13:17:36
kshなんてヽ( ・∀・)ノ●ウンコー

54 :デフォルトの名無しさん:2005/05/22(日) 14:56:59
ashなんてヽ( ・∀・)ノ●マンコー

55 :デフォルトの名無しさん:2005/05/23(月) 22:52:38
ヽ( ・∀・)ノ●ウンコーbashで質問です
引数に与えられたファイルの最終更新時刻から現在までの時間を求める
関数fooを作成したのですが
function foo(){
  local nowtime=$(date '+%s')
  loca lfiletime=$(date -d "$(ls --full-time $1 | cut -d' ' -f8,9)" '+%s')
  let difftime=$nowtime-$filetime
  let h=${difftime}/3600
  let m=${difftime}%3600/60
  let s=${difftime}%3600%60
  echo ${h}:${m}:${s}
}
使い方:
foo filename
処理速度が遅くていけてません
もっといい方法があったら教えてください

56 :デフォルトの名無しさん:2005/05/23(月) 23:19:21
速度を求めるなら C で書くのがいいと思う


57 :デフォルトの名無しさん:2005/05/25(水) 20:33:15
>>55
スクリプトに速度を求めるのは間違い。
difftime以外の変数を全廃してそれでも遅ければ別の方法を検討するべき

>>56
おおむね同意

58 :55:2005/05/26(木) 00:13:13
>>56
>>57

まぁそりゃそうなんですけどね Cで書いた方が(この処理に関しては)楽だし
もっとエレガントにできちゃう方法があるのかなと聞いてみますた

アドバイスありがとうございました

59 :デフォルトの名無しさん:2005/05/27(金) 20:24:26
つまり役立たずは消えろってことだよ
わかった?>>56-57

60 :デフォルトの名無しさん:2005/05/27(金) 21:02:35
なんかほのぼの…

61 :デフォルトの名無しさん:2005/06/06(月) 21:18:28
bashなんですが教えてください
シェルスクリプトソースに含まれる変数を抽出しようとして
ますが、いい方法が思いつきません

cat hoge.sh | grep '\$.+' | 'ここがわからんぽ' | sort | uniq

'ここがわからんぽ'を'
sed 's/\$.\+/'にすれば「変数」だけ取り除けるんですが
sedの置換条件を反転すればいいんでしょうけどやり方がわからん・・


62 :デフォルトの名無しさん:2005/06/06(月) 22:22:49
とりあえず俺が思いついたの。でもこれでは一行につき一個しか取り出せない。

sed 's/.*\(\$\w\+\).*/\1/p'

63 :デフォルトの名無しさん:2005/06/06(月) 23:06:57
sedではツールの仕様上、一行に一つだと思うけど。
awkとかperlとか。もっと本格的にlex(もしくはその親戚)とか

64 :デフォルトの名無しさん:2005/06/07(火) 00:01:32
>>61-63
どれどれ、じいにやらしておくれでないかい?
以下のスクリプトをファイルに書き込んで、sed -n -f に渡してみ。-nは重要さの。

:restrt
s/^[^$]*\$/$/
texist
bend
:exist
h
s/\(\$[a-zA-Z0-9_{}]*\)/\1\
/
P
s/.*\
//
trestrt
:end

65 :64:2005/06/07(火) 00:05:59
>>64
見直すと、6行目の「h」は全く要らんのお。取り去っておくれや。

じいの時代はの、
・ラベルは6文字まで。
・sedの扱う正規表現には\wとか+とかなかった。
・sedにグループ化の記号{}とかはなかった。
だったので読みにくくてすまんのお。

若い人が現在のモダンなsed向きに綺麗に書き直しておくれ。

66 :62:2005/06/07(火) 00:06:41
むはは。ダメダメだわこれ。つか変数部分の終了を検知するのマンドクセ
>>63
sedでも不可能ではないと思う。けど相当にややこしい。

67 :62:2005/06/07(火) 00:08:06
あ、いつのまにか偉い人が。

68 :64:2005/06/07(火) 00:08:29
それから、じいの時代には改行に\nとか使えなかったのも
sコマンドの切れ目のわかりにくさに影響しとるのお。

年寄りの話は長くていかんってか?まあ先が短いんだから大目に見ておくれ。

69 :デフォルトの名無しさん:2005/06/07(火) 00:46:39
:restrt
s/^#//
tend

冒頭にこう入れちゃうのはどうでしょ。
あとbashでは${}の中に%#:-=+*?!/がありだから、
凝ったスクリプトだと途中で切れちゃう変数が出ますね。

70 :デフォルトの名無しさん:2005/06/07(火) 23:48:04
kshですが教えてください。
cat TEST* > test_all.dat
としたいのですが
TEST*にマッチするファイルが多すぎてエラーに
なってしまいます。
初心者の私では
ls > file.list
としてfile.listに該当ファイル名を出力し
そこから一件づつtest_all.datに追記する方法しか
考えられませんでした。
何かいい方法があれば教えてください。

71 :デフォルトの名無しさん:2005/06/08(水) 00:05:49
>>70
man find

72 :デフォルトの名無しさん:2005/06/08(水) 00:46:02
>>70
ls -1 | grep ^TEST | xargs cat > test_all.dat
lsがaliasされてる場合は注意。

73 :デフォルトの名無しさん:2005/06/08(水) 19:02:57
>>71
findでなんとかなるのでしょうか?

>>72
ありがとうございます。
試してみます。

74 :デフォルトの名無しさん:2005/06/08(水) 19:10:27
>>71
すみません。わかりました。
72とほぼ同じ方法ですね

75 :デフォルトの名無しさん:2005/06/08(水) 22:28:02
少し知恵を貸してほしいのですが・・・

SQLで吐かしたテーブルのカラム名を
単純にカンマで区切って連結させたいのだけど
どうすればいいでしょうかね?



76 :デフォルトの名無しさん:2005/06/08(水) 23:02:57
>>75
> SQLで吐かしたテーブルのカラム名

というのはどうでもよくて、

それがどういうフォーマットなのか
を書かないと訳がわかりません

77 :デフォルトの名無しさん:2005/06/09(木) 00:12:57
>>72
> ls -1 | grep ^TEST | xargs cat > test_all.dat
> lsがaliasされてる場合は注意。
\ls みたいにエスケープすれば、エイリアス展開を抑制できるよ
スクリプトなら必須


78 :デフォルトの名無しさん:2005/06/09(木) 01:36:07
し、知らなかった…

79 :デフォルトの名無しさん:2005/06/10(金) 01:35:51
つか、スクリプト書くのにaliasされてしまう設定って・・・

80 :デフォルトの名無しさん:2005/07/11(月) 23:17:23
サーバーにパスワードでログインして
サーバのシェルからpingをどこどこに何回打って
そのlogを保存する
とかのスクリプトの書き方を教えてください。
よろしくお願いいたします。


81 :デフォルトの名無しさん:2005/07/11(月) 23:29:00
おれはその手の作業はteratermマクロでやってるから。
shより便利だから!

82 :デフォルトの名無しさん:2005/07/11(月) 23:29:00
>>80
サーバーが送ってくる文字列(Login:とか)を待って、それに応じて
こっちから文字列を送り返す作業が必要。これにはexpectが便利。
いろんな言語用にいろんなバリエーションがあるけど、
シェルスクリプトでということだからexpect(1)だろうな。後はググれ。

pingの結果を保存する方法はexpect(1)がわかれば自然にわかっから。

それから、パスワードをスクリプト中に書いたり、ファイルに保存したりは
すんなよ(なるべく)。これもexpec(1)ならユーザに入力させるように書ける。

83 :デフォルトの名無しさん:2005/07/12(火) 00:52:08
ping -t 5 > a.txt

84 :デフォルトの名無しさん:2005/07/12(火) 21:51:39
>>81
>>82
>>83
レスありがとうございます。
今、telnet(5のサーバに連続で)で接続して、
pingとかを打ってそのログがどうだったら
この値を返すとか
考えてまして。。。
まったくシェルスクリプト書いた事ないので。。。
今、cygwinで少し理解できるようになりました
この文字を返す

85 :デフォルトの名無しさん:2005/07/12(火) 22:25:25
teraterm便利だよね
UNIXもこれなかったら死滅してたよ

86 :84:2005/07/12(火) 22:49:38
telnet でサーバに接続して
loginIDとパスワードを打ち込むシェルスクリプトはどの様に書けばよろしいのでしょうか?


87 :84:2005/07/12(火) 23:43:50
( sleep 5 ; echo user; sleep 1 ; echo pass; sleep 1 ;

echo ipconfig ) | telnet host

であってますでしょうか?

88 :デフォルトの名無しさん:2005/07/13(水) 02:12:17
上のsleepみたいな不確実なことしないといけないのでしょうか。
出力から何か文字列がきたら切り分けるって風に組みたいんですが。

89 :デフォルトの名無しさん:2005/07/13(水) 03:09:15
expect使えばって書いてあるのに何で使わないの?

90 :デフォルトの名無しさん:2005/07/13(水) 03:44:51
もはやシェルスクリプトじゃないじゃn

91 :デフォルトの名無しさん:2005/07/13(水) 04:30:02
横レスだが、expect はバランスが悪くないか
追加でプログラムをインストールする程の機能でもないし
個人で使ってるマシンなら良いけど

92 :デフォルトの名無しさん:2005/07/27(水) 07:40:54
複数ディレクトリ以下の文字コードを一度に全部変換したいのですが、
うまい方法あったら教えてください。
シェルスクリプト、もしくはperlで実現したいです。
よろしくお願いします。

93 :デフォルトの名無しさん:2005/07/27(水) 10:37:25
>>92
変換対象はファイル名か? それともテキストファイルか?
いずれにしても、perlなんぞを持ち出すまでもないだろ。

94 :デフォルトの名無しさん:2005/07/27(水) 15:08:00
>>92
find directories -type f -exec ...

... の部分はいろいろ。元ファイルを新文字コードの内容で置き換えてくれる
プログラム(やスクリプト)なら自明。だけど、別なファイルに書き込む場合でも
-exec mv {} {}.orig \; -exec コード変換 {}.orig {} \;
とか書けばいい。

95 :92:2005/07/27(水) 18:41:15
すいません。説明不足でした。
ファイル名がわからない状態で変換したいです。
.exeファイルなどは無視して
.cpp .hppファイルとかだけを全部検索して
順番に文字コードを変換していきたいです。

96 :デフォルトの名無しさん:2005/07/27(水) 19:15:59
>>95
だったら
find ... -name '*.cpp' -o -name '*.hpp' ...
とか。
portability気にしなくていいなら -o 使わずファイル名パターンに凝ってもよい。

後は適当にman findして。

97 :92:2005/07/27(水) 22:04:12
>>96
基本はfind使っていくのがよさそうということですね。
今からman findがんばって読みます。
ありがとうございました。

98 :デフォルトの名無しさん:2005/08/05(金) 16:35:18
age

99 :デフォルトの名無しさん:2005/08/05(金) 20:00:08
なんでfindみたいなクソコマンドがいまだに残ってるのか不思議でしょうがない
そんなUNIX

100 :デフォルトの名無しさん:2005/08/05(金) 22:41:37
釣れますか?

101 :デフォルトの名無しさん:2005/08/05(金) 23:44:45
DOSのfindコマンドよりはまし。

102 :デフォルトの名無しさん:2005/08/07(日) 12:49:43
tacコマンドに相当する機能を実現したいのですが、
どう実装するのが一番効率がいいんでしょうか

シェルはbashです

103 :デフォルトの名無しさん:2005/08/07(日) 13:44:39
>>102
シェルスクリプトだけじゃなんともならないような。
awk使えばなんとでもなるけど。

104 :デフォルトの名無しさん:2005/08/07(日) 14:37:16
findのオプション並べるの面倒だから
GUIで作ってくれないかな

105 :デフォルトの名無しさん:2005/08/07(日) 14:40:31
>>104
シェルスクリプトでは無理。

106 :デフォルトの名無しさん:2005/08/07(日) 15:03:29
>>102
一番効率が良いかどうかは知らない。
cat -n file | sort -nr | cut -f2-
100万行超えないなら sort -r にすれば速くなる。

107 :デフォルトの名無しさん:2005/08/07(日) 17:09:13
それのどこがシェルスクリプトなんだか。

108 :デフォルトの名無しさん:2005/08/07(日) 18:27:14
>>107
シェルの組込みコマンドだけで作るのがシェルスクリプトだと思ってる?

109 :107:2005/08/07(日) 20:15:58
>>108
いやぁ、3段もプロセスかませてtacの劣化コピー作るメリットがないかと。
とても効率いいとは思えないしね。

110 :デフォルトの名無しさん:2005/08/07(日) 20:20:47
>>109
誰もそんなこと聞いてないんだが

111 :デフォルトの名無しさん:2005/08/07(日) 20:24:47
日本語が不自由なんだな

112 :デフォルトの名無しさん:2005/08/07(日) 20:34:04
違うなぁ、なんか違うんだよ。
シェルスクリプトを名乗るんならなんかこう、ソウルが感じさせて欲しいわけよ。
ただ外部コマンドを並べました。そんな誰でも書けるような単純なものじゃなくてね。
だからってまぁ、シェル組み込みコマンドだけで作らなきゃいけないなんて言う訳じゃないよ。
外部コマンドだって重要なファクターさ。外部コマンドをパイプラインで繋いでいって、
それで素敵なハーモニーが産まれるなら文句は言わないよ。
でもなぁ。cat, sort, cut, なんて響いてこないんだよ。ハートにね。
折角シェルスクリプトでやるんだったら最初にも言ったけど、ソウルを感じさせてよ。

113 :デフォルトの名無しさん:2005/08/07(日) 22:21:37
>>112
シェルスクリプトが一番流行って発展したのは1980年代だと
思うけど、その頃のソウルって結構>>106みたいな感じよ。

>>112がソウルを感じるスクリプトの具体例みたいなのってある?


114 :113:2005/08/07(日) 22:29:17
あと、

>>112 そんな誰でも書けるような単純なもの

このへんが俺のソウルと波が合わないなあ。

JCLと対比してのシェルだとか、
Multicsを踏まえてのUnixとか、
精細粒度のプログラミングと対比してのシェルスクリプトとか、
そういう思想は、むしろ「単純なもの」を目指す哲学だったはずよ。
「誰でも書ける」とまで甘くみてたエンジニアはさすがにいなかったけど。

ま、こんなこと2chで書いても、親父ハケーンとか笑われちゃうんだろうな...

115 :デフォルトの名無しさん:2005/08/07(日) 23:06:11
単なるツールボックスアプローチにソウルも何もあるかっw

116 :デフォルトの名無しさん:2005/08/08(月) 00:23:49
>>108が図星で勢いで誤魔化しただけだろ

117 :107≠112:2005/08/08(月) 02:55:47
>>116
1行野郎をシェルスクリプトと言いたくなかっただけなんですが。
そういう意味では、>113とは思いっきり反りが合わないらしい。
#>112はなんかのコピペみたいで受けたけど。

>>113
えーと、>112じゃないけどwhatisとか?


118 :デフォルトの名無しさん:2005/08/08(月) 03:16:19
効率のいいスクリプト引っさげて再登場するのかと思ったら…

119 :107≠112:2005/08/08(月) 05:01:01
だって>103なんだもの。お目汚しにawkの例。
--
{
line[NR] = $0;
}
END {
for (ic = NR; ic > 0; --ic) {
print line[ic];
}
}
--
行数多くて泣いても知らない。

120 :デフォルトの名無しさん:2005/08/08(月) 07:38:13
ひっくり返すだけなら
reverse() {
local line
if read line; then
reverse
echo $line
fi
}
reverse

121 :デフォルトの名無しさん:2005/08/10(水) 21:06:35
インラインにすりゃいいってもんじゃなだろ的なものをわざわざ淫乱で書く

それがシェル|スクリプト|クオリティ

122 :デフォルトの名無しさん:2005/08/11(木) 09:50:15
曰く「○○があるだろ」
曰く「○○で十分」
曰く「車輪の再発明はするな」
大人は誰もわかっちゃくれない

123 :デフォルトの名無しさん:2005/08/13(土) 03:03:47
これを仕事にしているから。
仕事だから「実現する事」がなによりも優先されるのだよ。

124 :デフォルトの名無しさん:2005/08/14(日) 09:17:58
ソウルってチョンだろ

125 :デフォルトの名無しさん:2005/08/14(日) 09:52:03
>>123 子供が遊んでる横でそれを言うのはナンセンス。

126 :デフォルトの名無しさん:2005/08/17(水) 13:06:26
sshやtelnetでリモート端末にログインしたあと、さらにその端末でコマンドなどを実行するにはどのようにしたらよいのでしょうか?

127 :デフォルトの名無しさん:2005/08/17(水) 13:23:07
>>126
ログインシェルに実行したいコマンドを書いておくとか、
ログイン時に実行したいコマンドも指示するとか。

128 :デフォルトの名無しさん:2005/08/17(水) 13:33:06
man sshすると書いてある。

ssh [-l login_name] hostname | user@hostname [command]

% ssh nanasi@server "ping -c 5 www.example.com" > logfile

とやると手元のlogfileにpingの結果が残る。




129 :デフォルトの名無しさん:2005/08/17(水) 13:52:42
>>128
灯台もと暮らしでした

130 :デフォルトの名無しさん:2005/08/17(水) 14:19:11
>>129
>灯台もと暮らしでした
あんたは灯台守かい。

131 :デフォルトの名無しさん:2005/09/06(火) 01:37:49
C言語のライブラリをシェルスクリプトで使う(呼び出す)方法知ってますか?

ライブラリの中にchar *moji( char *, int, char ) が有った場合の
呼び出し方がわかりません。
(昔作った事があったのですが、ど忘れ…)

詳しい方、教えて下さい。お願いします。

132 :デフォルトの名無しさん:2005/09/06(火) 01:43:52
>>131
無理なので諦めましょう

133 :デフォルトの名無しさん:2005/09/06(火) 01:48:08
>>132
無理じゃないんだよ。
昔、新人の時に教わって作った事があるけどシェルスクリプト久しぶりで…
ネットで検索しても引っかからないから、詳しい人に教えて貰いたいです。

134 :デフォルトの名無しさん:2005/09/06(火) 02:51:38
新人の頃の先輩に聞けよ

135 :デフォルトの名無しさん:2005/09/06(火) 05:59:40
「printfとかmkdirとか、ライブラリと同名のプロセスを呼んでいた」に一票。

136 :デフォルトの名無しさん:2005/09/06(火) 10:48:06
ニ票

137 :デフォルトの名無しさん:2005/09/06(火) 13:04:09
三票

138 :デフォルトの名無しさん:2005/09/06(火) 13:23:49
もしかしてrundll32.exeのことかね。
C言語のライブラリではたぶん使えないが。

139 :デフォルトの名無しさん:2005/09/06(火) 19:39:47
>>138
シェルスクリプトと言ってる時点でUN*Xでしょ?
スレ的にも。

140 :デフォルトの名無しさん:2005/09/06(火) 21:31:34
誰もUN*Xなんて断ってないが。
もし132の言う物が別にあったとしても原理は同じ様なものだろ。

141 :デフォルトの名無しさん:2005/09/06(火) 22:27:20
ウホっ良い強弁

142 :デフォルトの名無しさん:2005/09/07(水) 10:23:50
>>140
> もし132の言う物が

132が何を言ったって?

> From: [132] デフォルトの名無しさん <sage>
> Date: 2005/09/06(火) 01:43:52
>
> >>131
> 無理なので諦めましょう


143 :デフォルトの名無しさん:2005/09/07(水) 23:36:32
>>131の者です。
解決しました。違う掲示板で回答が有りました。
共通関数 . にするよに、やり方は簡単でした。(方法は.ではないよ)
どももお騒がせしました。

144 :デフォルトの名無しさん:2005/09/07(水) 23:39:03
>>143
僕らの手の届かない所に逝ってしまったみたいですね.
さようなら...

145 :デフォルトの名無しさん:2005/09/19(月) 01:54:44
うわぁ、イタい質問w

146 :デフォルトの名無しさん:2005/10/04(火) 13:24:56
クストン
肝心なことが抜けていた

atコマンドでは

at -f <filename> "13:00"
という具合に指定はできても、

at -f <filename> <指定ファイル> "13:00"

みたいなことが出来ないみたいなんだ。
つまりayasii_shという実行ファイルには必ず参照するファイルを指定しないといけないわけ

"ayasii_sh ayasii_config"

みたいな。
でもそれを "ayasii_sh ayasii_config" "13:00"という風には入れられないんだ
at -f


147 :デフォルトの名無しさん:2005/10/04(火) 14:17:30
>>146 肝心なことが抜けていた
???それが肝心なことだというの???

一体 >>146 は何についてのレスなのさ?
何かの誤爆?

148 :デフォルトの名無しさん:2005/10/04(火) 22:25:28
シングルユーザーモードで立ち上げざるを得ないは、
ボーンシェルじゃないと動かないから、
少なくともシステム管理やる人間は、
ボーンシェル必須って教えられてきたけどね。

149 :デフォルトの名無しさん:2005/10/05(水) 01:01:04
んなこたーない。

150 :デフォルトの名無しさん:2005/10/05(水) 01:26:36
仕事でシェルスクリプト書くことになったんだが・・
オススメの参考書を教えてくれぇ。・゚・(ノД`)・゚・。

・・・ちなみにBシェルね(゚∀゚)

151 :デフォルトの名無しさん:2005/10/05(水) 01:55:04
>>150
man bash
いや、マジで。

152 :デフォルトの名無しさん:2005/10/05(水) 02:14:14
>>151
いや、確かにそうなんだが・・
なんというか、その。
手元にある安心感とか・・
ね?

考えるより印刷したほうが早いかな (;´Д`)

153 :デフォルトの名無しさん:2005/10/05(水) 03:30:18
>>152
ttp://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

これ印刷したら結構なページ数になると思うよ。

趣味で書くならともかく、仕事なんだから仕様をきちんと
理解しないといけないわけでしょ。
なら、まずは man を読む事から始めないとね。

154 :デフォルトの名無しさん:2005/10/05(水) 05:05:19
bashのドキュメントだけどさ、GNU発祥なんだからmanより先に
infoなのでは。少なくとも「公式」の情報はinfoの方でしょ。
どちらも精読したわけじゃないから、違いは知らんとです。(弱っ)

155 :デフォルトの名無しさん:2005/10/05(水) 08:07:06
Bシェルつってんだから、man sh だろ

156 :デフォルトの名無しさん:2005/10/05(水) 13:27:31
>>150
「UNIXプログラミング環境」
ttp://www.amazon.co.jp/exec/obidos/ASIN/4871483517

B-shellの書き方だったらこれがお薦め。
ほかの部分は古くなってるが読んでおいたほうがいい。


157 :デフォルトの名無しさん:2005/10/05(水) 13:40:11
>>156
それクリックしてマーケットプレースのを注文しちゃった

158 :デフォルトの名無しさん:2005/10/14(金) 01:35:02
EXPECTでテキストファイルを一行ずつ読む方法を教えてください

159 :デフォルトの名無しさん:2005/10/14(金) 09:45:17

なぜ?

160 :デフォルトの名無しさん:2005/10/15(土) 20:35:11
下記のプログラムでX.X.X.Xの所(1.1.1.1,2.2.2.2,3.3.3.3と続く)を
ファイルから読み出して実行する方法を教えてください。
#!/usr/bin/expect
telnet X.X.X.X
expect -ex "login:"
send "UUUUU\r"
expect "Password:"
send "UUUUU\r"
expect "linux$"
send "ifconfig"
expect "linux$"
send "exit\r"
expect eof


161 :デフォルトの名無しさん:2005/10/15(土) 20:49:18
>>160
expectって俺は使ったこと無いけど
あれはたしかtclの変種でしょ
普通にtclのコマンド使えばいいんじゃないの。
openとかgetsとか

162 :デフォルトの名無しさん:2005/10/15(土) 21:17:44
>>160
> #!/usr/bin/expect

この時点でシェルスクリプトではないのだが。

163 :デフォルトの名無しさん:2005/10/15(土) 21:36:41
>>162

書き直します

#!/usr/bin/sh
expect -c
telnet X.X.X.X
expect -ex "login:"
send "UUUUU\r"
expect "Password:"
send "UUUUU\r"
expect "linux$"
send "ifconfig"
expect "linux$"
send "exit\r"
expect eof

よろしいでしょうか?
アドバイスください。

164 :デフォルトの名無しさん:2005/10/15(土) 21:47:47
で、openだのgetsだのは使ってみたの?
tclはほとんど使わないが、たぶん

set filename ファイルの名前
set fd [ open $filename r ]
while { [ gets $fd line] != -1 } {
  lineを処理
}
close $fd

とかそんな感じだと思われるが。

ま、動的に必要なパラメタがIPだけならargv渡しでもいいだろうし
シェルでラップするんならシェル変数とクォート使って
埋め込んでもいいよな。
好きにしる。

165 :デフォルトの名無しさん:2005/10/15(土) 21:50:12
>>164
ありがとうございます^^
今から試してみます。
本当にありがとうございました。

166 :デフォルトの名無しさん:2005/11/01(火) 23:36:11
お世話になります。
LynxOSでシリアル経由にて装置を制御する
シェルスクリプトを考えています。
STTYコマンドで調歩同期の設定しようと思いますが
なかなかうまくいきません。
どなたかご存知の方ご教諭くださいますようお願いします。

167 :デフォルトの名無しさん:2005/11/11(金) 10:47:24
すみません。息詰ってしまいました。
質問させてください。
B-Shellで与えられたホスト名、ユーザー名、パスでFTPログインできるか
確認だけ行いたいのですがやり方がわかりません。
ログインエラーも判断させる感じで作りたいのです。
シェル初心者で恐縮なのですが
どなたかご存知の方いらっしゃいましたらご教授お願いします。

168 :デフォルトの名無しさん:2005/11/11(金) 11:52:07

>>167
君がやり方を分からなかろうと知ったことでは無いし、"初心者"が免罪符になると思っているなら書き込むな

169 :デフォルトの名無しさん:2005/11/11(金) 14:39:13
>>166
ここじゃなくて、使っているOSの端末ドライバについて
質問するようなスレに行ってください

--
それは端末ドライバのせいなんだよ


170 :デフォルトの名無しさん:2005/11/11(金) 17:14:36
>>167
それは質問ではなく「作ってよこせ」というお願いですよ。

171 :デフォルトの名無しさん:2005/11/19(土) 15:19:56
最近bashを勉強中ですが、ちょっと質問させてください

シェルスクリプトでコマンドを実行して
失敗したら強制終了させたいのですがどうしたらいいでしょうか?

COMMAND=mkdir test
if ! $COMMAND
then
echo "失敗"
exit 1
fi
echo "成功"
これじゃ、だめですよね?

172 :デフォルトの名無しさん:2005/11/19(土) 16:12:54
ヒント:直前のコマンドの終了ステータスは変数 $? に格納される。

173 :デフォルトの名無しさん:2005/11/19(土) 17:00:01
ありがとう>>172さん
親切な方がいて助かりました
ついでにもう1つ質問させてください
シェルスクリプトでヒアドキュメントを使ってファイルに書き込むにはどうしたらいいでしょうか?


174 :デフォルトの名無しさん:2005/11/19(土) 17:08:01
>>173
command > file <<EOF
...
...
...
EOF


175 :デフォルトの名無しさん:2005/11/19(土) 17:30:08
>>174ありがとうございますー!
素敵です・・・


176 :デフォルトの名無しさん:2005/11/20(日) 10:21:45
いや、manページを読めば判ることで素敵って言われても。

177 :デフォルトの名無しさん:2005/11/20(日) 12:24:42
>>176すいません
何のmanページ見たらいいのかわかりませんでした・・・

そこでまた質問させてください
useraddを実行したとき自動でパスワードを入力させるにはどうしたらいいでしょうか?


178 :デフォルトの名無しさん:2005/11/20(日) 12:53:51
つ[man bash]

179 :デフォルトの名無しさん:2005/11/21(月) 19:49:25
仏の顔もってやつだなw

180 :177:2005/11/21(月) 23:41:48
ちょっと質問間違えました
シェルスクリプトでpasswd hogeを実行した場合
パスワードを求められますが、これを全部シェルスクリプトで行いたい。
これって無理でしょうか?

181 :デフォルトの名無しさん:2005/11/22(火) 00:58:02
このスレで、passwordとかパスワードとか検索して、その前後100回読んで、
あと、UNIX板のシェルスクリプトスレでも同じことして、
それでもわからなければあきらめろ

182 :177:2005/11/22(火) 01:48:17
>>181
ありがとう
がんばってみます

183 :デフォルトの名無しさん:2005/11/22(火) 02:18:59
なんかUNIX板で似たような質問を見てきた気がするけど、気のせいかな?

184 :デフォルトの名無しさん:2005/11/22(火) 04:40:34
>>183
がんばる=他のスレでも質問する だったみたいだな。w

185 :デフォルトの名無しさん:2005/11/26(土) 11:08:04
shellスクリプトの開発環境ってありますか?
べた打ち、ベタ読みは不便で・・・

命令文や変数に色がつく程度でも良いのですが・・・

186 :デフォルトの名無しさん:2005/11/26(土) 11:33:47
>>185
お使いのエディタに、キーワードを登録してください。
登録済みキーワードに色がつかないエディタをお使いなら、適宜乗り換えてください。

187 :デフォルトの名無しさん:2005/11/26(土) 17:29:36
試しにxyzzy bash-mode でぐぐったら引っかかった。
いいかも、これ。

188 :デフォルトの名無しさん:2005/11/26(土) 20:10:23
何で色が付かないと不便なんだろう
漏れは逆に色が付いてると禿しく見にくい

189 :デフォルトの名無しさん:2005/11/26(土) 21:31:21
色使いが悪いだけじゃないのか

190 :デフォルトの名無しさん:2005/11/26(土) 22:30:11
エディタ操作って「慣れ」とか「親しんだ環境」が最重要事項だから

191 :デフォルトの名無しさん:2005/11/26(土) 23:20:32
>>186
えーとえーと、
viエディタでガリガリ書いて、コンパイルして
ってのに疲れたんです。
teratarm君はお目目に優しくないし・・・
エディタが擬似的に実行したりしてくれないかなあ・・・

>>187
情報ありがとうございます。

でもエディタそのものの使用で挫折しました。

192 :デフォルトの名無しさん:2005/11/26(土) 23:23:07
>>191
コンパイル?


193 :デフォルトの名無しさん:2005/11/27(日) 00:05:10
>>192
まちげーた・・・

sh ほにゃらら で、毎回実行して

ってのが正解です。
別にshって打つのは辛くないです。パス通す方が雌鳥なだけです。

まあその程度の人間だってことです。俺は。

194 :デフォルトの名無しさん:2005/11/27(日) 00:14:21
パス通す?

195 :デフォルトの名無しさん:2005/11/27(日) 00:44:41
実行権限与えるのがめんどくさい、じゃねーのか?
パスが通ってなかったら、sh 打ったって実行できん。

chmod 777 hoge するのが面倒なら、それこそシェルスクリプト組んどけ。

196 :デフォルトの名無しさん:2005/11/27(日) 00:50:44
#!/hoge
すら書いてなさそうな香具師だな

197 :デフォルトの名無しさん:2005/11/27(日) 01:28:22
まあ何だか知らないが、今までvi使ってたんならvimはどうよ。あれ
色つくだろ。

198 :デフォルトの名無しさん:2005/11/27(日) 01:32:53
なるほどー。
でも何でか、sh でカレントから新しくシェルを起動できるんだけどな?
ファイル名単体で打ったらダメだけど・・・環境変数に書いた覚えないし。

と思ったら、スクリプトの一行目が #!/bin/sh だったことを思い出した。
なるほど。そうか、パスは通してるのか。ふむふむ。
「実行権限を与えてパスを通す」。なるほどなるほど。

いやー、どれだけ自分の知識が曖昧か再認識しましたよ。

199 :デフォルトの名無しさん:2005/11/27(日) 02:00:46
>>197
どうやらvimにシェルは無いっぽいです。

というわけで、terapadの色の設定を
ガリガリ書き換えることにしました。
皆様お世話になりました。

また何かあったらよろしくお願いします。

200 :デフォルトの名無しさん:2005/11/27(日) 02:14:08


























200

201 :デフォルトの名無しさん:2005/11/27(日) 10:30:51
>>195
>パスが通ってなかったら、sh 打ったって実行できん。
へ?


202 :デフォルトの名無しさん:2005/11/28(月) 00:05:03
俺も>>195は意味不明だが、スルーした方がよい気がする

203 :デフォルトの名無しさん:2005/12/04(日) 19:53:23
ファイル名を一括置換するシェルスクリプト

#! /bin/sh

for nm in temp*;
do
mv $nm HOGE${nm#tr};
done

temp → HOGEにするのはわかるのですが、
hhh_a_xxxxxxxxx.txt → hhhaxxxxxxxxx.txt  のように _ を削除(一括置換)するスクリプトを教えてください。
※xxxxxxxxxは可変

204 :デフォルトの名無しさん:2005/12/04(日) 21:14:19
>>203
方法は色々あるけど tr -d あたりがお勧め。


205 :デフォルトの名無しさん:2005/12/04(日) 22:40:36
>>204

tr のコマンドの意味はわかったんだけど、どうやってコマンド組み合わせればいいの?
tr は標準出力のものを対象にしてると書いてあったけど、コマンドの組み合わせ方が、わかんないです。

206 :デフォルトの名無しさん:2005/12/04(日) 23:17:46
>>204

#!/bin/sh
for f in hoge*
do
mv $f `echo $f | tr -d 削除文字`
done

できたよ。ありがとう。

207 :デフォルトの名無しさん:2005/12/09(金) 19:09:12
質問なんですけど、
NTのコマンドプロンプトで
テキストファイルが二つあって
中身を片方にアペンドしたいのですが
どう記述したらいいでしょうか?
マニュアルも何もなくて一人で困ってます

208 :デフォルトの名無しさん:2005/12/09(金) 19:10:20
type a.txt >> b.txt

209 :デフォルトの名無しさん:2005/12/09(金) 20:00:54
ありがとうございました
ホント助かります

210 :デフォルトの名無しさん:2005/12/10(土) 02:05:23
helpコマンドがある

211 :デフォルトの名無しさん:2005/12/12(月) 13:58:44
数100人のユーザがいるLinuxで
全ユーザのパスワードを一括で設定できる
シェルスクリプトを教えろよ。

212 :デフォルトの名無しさん:2005/12/12(月) 14:04:46
sed 's/:[^:]:/:hoge:/'

213 :デフォルトの名無しさん:2005/12/12(月) 22:19:23
evalって問答無用に変数を展開しちゃうんですよね?

214 :デフォルトの名無しさん:2005/12/12(月) 22:39:28
どういう局面のことを言ってるのかわからんけど、
変数を展開するのはevalじゃないと思われ。
多分だけど、eval以前に変数が展開されてるんちゃうか。再確認してみ。
evalは展開された結果を評価してるだけのはず。

215 :デフォルトの名無しさん:2005/12/19(月) 15:43:31
user> ./a.out < a000001.txt > result.txt

で結果をtxt化しているのですが、a000001.txtをa100000.txtまで処理させて
一個一個の結果を足して一つのtotal_result.txtしていきたいのです。
どのようにしたら良いのでしょうか?

具体的にはa000001.txtは以下のように出力されたとします。
1 0 3
2 4 3
3 7 7
4 8 3
5 8 1
6 2 8
7 0 4
8 2 3

a000002.txtも以下のように出力されたとします。
1 0 3
2 2 6
3 4 7
4 6 3
5 2 2
6 6 9
7 1 1
8 1 2


216 :デフォルトの名無しさん:2005/12/19(月) 15:44:16
これが10万まで続くのですが、結果の2列目と3列目を足していきたのです。

1 0  6
2 6  9
3 11  14
4 14  6
5 10  3
6 8  17
7 1  5
8 3  5

(これは先ほどの二つの結果の合計です)


217 :デフォルトの名無しさん:2005/12/19(月) 16:06:02
スレ違い回答だが
awk '{x[$1]+=$2;y[$1]+=$3;} END {for(i=1;i<=3;i++)printf("%d %d %d\n",i,x[i],y[i]);}' result*.txt


218 :215:2005/12/19(月) 18:20:06
>>217さん
レスありがとうございます。
UNIX初心者な者で解答をみてもよく分からないのが現状です。

gccでコンパイルした後、どうしていけば10万のファイルの結果を合計していけるのでしょうか?
スレ違いとは思いますが、ご指導いただけたらと思います

219 :デフォルトの名無しさん:2005/12/19(月) 19:12:10
んなのプログラムの方変更した方が早いよ


220 :デフォルトの名無しさん:2005/12/19(月) 19:14:39
んなのが調べられないぐらいのレベルなら
聞いてボーッと回答待つより1万行のバッチ書け。


221 :デフォルトの名無しさん:2005/12/20(火) 20:43:04
変数置換えで入れ子したい!
${${NAME##*/}%.*}
こゆー事したい場合どんなのがスマート?
わかりにくいね、上のはbasename ${NAME%.*} なんだけど


222 :デフォルトの名無しさん:2005/12/21(水) 02:55:27
>>221
$ x=/a/b/c.d
$ y=${x#${x%?}}
$ echo $y
d

こういう事ならできるけど、前後を一変に取り除く方法は知らない。

$ x=/a/b/c.d
$ y=${x%.*}
$ y=${y##*/}
$ echo $y
c

これじゃダメなの?

223 :デフォルトの名無しさん:2005/12/21(水) 09:50:00
>>215
joinを知れば何かが見えてくる。

224 :デフォルトの名無しさん:2006/01/07(土) 16:12:11
質問です。
例えばdateで現時刻をvar.txtに出力するとします。
date > var.txt

txtファイルの中身は時間が書いてあると思うのですが、
もう一度↑のコマンドを実行した場合に、中身も上書きされてしまいますよね?
それで同じファイルに↑のコマンドの実行結果を書き足していくことは不可能ですよね。
可能でしたらその方法をおしえてくだしあー

225 :デフォルトの名無しさん:2006/01/07(土) 16:19:45
>>224
date >> var.txt

226 :デフォルトの名無しさん:2006/01/07(土) 16:20:23
>>225
どうも

227 :デフォルトの名無しさん:2006/01/09(月) 18:04:46
ある年月が入力された時に、その前後の年月を出力するには
どのようにすればよいでしょうか?

例:
200512と入力されると、200511 200601が出力される

228 :デフォルトの名無しさん:2006/01/09(月) 18:07:50
>>227
つ date コマンド

229 :デフォルトの名無しさん:2006/01/09(月) 18:21:10
dateコマンドでどのようにして前の月や次の月を
表示させるのですか?

230 :デフォルトの名無しさん:2006/01/09(月) 18:21:27
>>227
cut,sed,date,exprくらいでできそう

231 :デフォルトの名無しさん:2006/01/09(月) 20:53:50
>229
すくなくともgnuのdateはできるよ
ttp://www.linux.or.jp/JM/html/GNU_sh-utils/man1/date.1.html


232 :227:2006/01/09(月) 22:31:15
>231
おおこんなことができるのですね。
勉強になりました。
これでなんとかできそうです、ありがとうございました。

233 :デフォルトの名無しさん:2006/01/09(月) 22:38:31
どんな気持ちでこんなものを通したのか・・・
date --date '2 days ago'
days agoって・・・

234 :227:2006/01/09(月) 23:50:58
行けそうと思ったのですが、現在時からの日にち計算しかできませんでした。
うーん。。
特定した日にちから指定するのは無理かもしれません。。

235 :デフォルトの名無しさん:2006/01/10(火) 00:05:08
試してないので外れだったらスマンが
date --date '20060101 + 1 month'


236 :227:2006/01/10(火) 00:12:55
>234
いけました汗
ずっと1 monthの部分を外に出して実行してた大馬鹿者でした。
ありがとうございました。

237 :デフォルトの名無しさん:2006/01/10(火) 05:42:11
bash
って何て読むんですか?

ばっしゅ
ヴぁっしゅ
びーしぇる
ヴぉーんしぇる
ヴぉーんあげいんしぇる
ぷろんぷと・ヴぁっしゅ
ヴぁにっしゅ

皆さん何て読んでますか?

238 :デフォルトの名無しさん:2006/01/10(火) 06:54:52
bash

239 :デフォルトの名無しさん:2006/01/10(火) 06:59:25
シーシェルは孤高

240 :デフォルトの名無しさん:2006/01/10(火) 10:36:42
csh使ってる奴って変態なの?

241 :デフォルトの名無しさん:2006/01/10(火) 12:13:36
Solarisだと標準がcshだし。

242 :デフォルトの名無しさん:2006/01/10(火) 17:05:01
tcshが使えるのにcshを使ってたら変態
スクリプト書くのにもcshを使ってたら変態


243 :デフォルトの名無しさん:2006/01/10(火) 20:09:55
>>241
こらこら、嘘を教えなさんな。

244 :デフォルトの名無しさん:2006/01/10(火) 20:22:49
Solaris 1 のころならな

245 :デフォルトの名無しさん:2006/01/10(火) 21:42:11
>>243
Admintoolでshとcsh以外選べたっけ?

246 :デフォルトの名無しさん:2006/01/10(火) 22:10:04
>>245
admintool 自体が obsolete.

247 :デフォルトの名無しさん:2006/01/10(火) 22:33:06
そうだったのか。

248 :デフォルトの名無しさん:2006/01/11(水) 03:43:32
Oracle入れるとcsh押し売りされるよね


249 :デフォルトの名無しさん:2006/01/11(水) 04:03:14
あれは謎シェルだねw
何で直さないんだろうか。

250 :デフォルトの名無しさん:2006/01/22(日) 17:16:33
command | tee log | grep hoge
としたときに、commandの終了ステータスを知る方法はありませんか?
command > log
ret=$?
grep hoge log
としとけばretを見ることで可能なんですが、それ以外で。

251 :デフォルトの名無しさん:2006/01/23(月) 00:42:08
kwsk

252 :デフォルトの名無しさん:2006/01/23(月) 16:39:20
(command; echo $? >/tmp/hoge) | ....
じゃだめ?

253 :デフォルトの名無しさん:2006/01/26(木) 12:23:51
>>252
おお、なるほど!
ありがとうございます。

254 :デフォルトの名無しさん:2006/01/27(金) 22:18:39
シエル先輩をいぢくるスレはここですか?

255 :デフォルトの名無しさん:2006/01/31(火) 06:00:01
>>250
もう遅いかな?

bash には PIPESTATUS ってシェル変数があるよ。

$ true | false | exit 3 | true
$ echo ${PIPESTATUS[@]}
0 1 3 0

256 :デフォルトの名無しさん:2006/02/19(日) 05:53:58
ファイルの更新日時を取得する方法を教えてください

257 :デフォルトの名無しさん:2006/02/19(日) 12:04:08
>>256
stat
でもSunとかHPとかないOSもあるかも。

258 :デフォルトの名無しさん:2006/02/19(日) 13:39:39
>>256
つ[`ls -l`]

259 :デフォルトの名無しさん:2006/02/25(土) 01:29:18
超初心者な質問で恐縮なのですが、、

*.jpgと*.JPGのファイルを判断して

*-new.JPGのように名前を変更するには

どのようにしたら良いでしょうか?

お知恵をお貸しください。

よろしくお願いします。


260 :デフォルトの名無しさん:2006/02/25(土) 01:53:34
ls *.jpg|sed -e 's/\(.*\).jpg/mv \1.jpg \1-new.JPG/' > /tmp/foo
とでもして、
source /tmp/foo
でどう?

261 :デフォルトの名無しさん:2006/02/25(土) 02:50:31
bash + find ならこんな感じ?

find . -regex '.*\.\(jpg\|JPG\)' |while read i; do mv "$i" "${i%.*}-new.JPG"; done

262 :デフォルトの名無しさん:2006/03/14(火) 17:51:21
@@@

263 :デフォルトの名無しさん:2006/03/14(火) 18:29:29
【積年の】旦那にしてる密かな仕返し【恨みじゃー】
http://human5.2ch.net/test/read.cgi/ms/1141694640/

8 名前:可愛い奥様[] 投稿日:2006/03/07(火) 11:05:23 ID:8dtluKkp
夫の歯ブラシで洗面所の排水溝掃除。
洗面所をビショビショに汚した罰だ。

20 名前:可愛い奥様[age] 投稿日:2006/03/08(水) 00:40:17 ID:pRrk6A21
前に頭きた時あって
1度だけ歯ブラシで肛門カキカキしちゃった

22 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:27:12 ID:gU5mHc7J
よかった。どこのお宅も同じようなことしてて。

24 名前:可愛い奥様[] 投稿日:2006/03/08(水) 01:36:35 ID:SSSFsTqE
そうそう、ヘンなモノはダンナのお皿へ直行だよね。

41 名前:可愛い奥様[] 投稿日:2006/03/08(水) 11:55:18 ID:sjj+/60Q
見てるだけで気が晴れるな!
皆さん、頑張ってね!

42 名前:可愛い奥様[sage] 投稿日:2006/03/08(水) 20:33:51 ID:Ju2N1s7+
年金分割が楽しみじゃのう

63 名前:可愛い奥様[] 投稿日:2006/03/10(金) 08:55:20 ID:qLfJYpJR
家族で密かにはぶっている。

男性は肉体が汚く、精神が美しい傾向がある。(気に入らない相手に肉体的攻撃を加える⇒精神的攻撃も加える男は猛者)
女は肉体が美しく、精神が汚い傾向がある。(気に入らない相手に精神的攻撃を加える⇒肉体的攻撃も加える女は猛者)
女は隠れて悪事をする。気に入らない女子を便所でボコったり、便器舐めさせたり、男の友人を使ってレイプ、仲間外れにしたり。陰口、嫉妬。
女は対人関係において、この汚い性格を隠そうとするため、外面が非常によくなる。(猫かぶり)
男性諸君は外面に騙されないように気を付けて下さい。

264 :デフォルトの名無しさん:2006/03/18(土) 01:37:12
²


265 :http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 20:34:48
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

266 :デフォルトの名無しさん:2006/05/30(火) 23:27:37
質問です。Solaris9で、

rsh 192.168.1.1 su - user -c

267 :デフォルトの名無しさん:2006/05/30(火) 23:30:23
質問です。Solaris9で、

rsh 192.168.1.1 su - user -c "ls -l"

みたいな事やりたいんですけど、
"ls -l"のオプション部分が有効になりません。
なんとかならないでしょうか?

268 :デフォルトの名無しさん:2006/05/31(水) 03:19:58
>>267
リモートで実行するコマンドをまとめて括れ

rsh 192.168.1.1 'su - user -c "ls -l"'


269 :デフォルトの名無しさん:2006/05/31(水) 11:10:05
初歩的ですみませんがファイルのreadで質問があります
以下のreadの仕方では最終行にリターンコードがないと
最終行を読んでくれません。※リターンコードがあればreadしてくれますが・・・。
読む方法はないでしょうか

cat /aaa.txt | while read FILE
do
echo $FILE
done

aaa.txtの内容(この例だとghiを読み込まない)
abc
def
ghi

270 :デフォルトの名無しさん:2006/05/31(水) 11:43:23
>>269
catじゃなくて、必ず改行するタイプのフィルターに通せばいい。
例えば、awk '{print;}'でもいける。

271 :デフォルトの名無しさん:2006/06/09(金) 13:30:25
〜日前のファイルを削除するようなスクリプトを作成したいのですが
どのような感じになりますか?

272 :デフォルトの名無しさん:2006/06/09(金) 13:34:39
>>271
findではいけない理由があるのかね。
取り敢えず、1日(24時間)以上前のファイルを無条件に削除するならこんな感じ。
find . -mtime +1 -exec rm {} \;


273 :デフォルトの名無しさん:2006/06/09(金) 14:18:24
ctimeじゃないのか

274 :デフォルトの名無しさん:2006/06/09(金) 23:03:08
>>269
それ、最後の行まで普通にでたんだが、OSによるもんなのか
当方HP

275 :デフォルトの名無しさん:2006/06/10(土) 08:59:55
何となく本末転倒な対処

perl -wne 'chomp;print $_."\n";' ./aaa.txt | while read FILE
do
echo $FILE
done

276 :デフォルトの名無しさん:2006/06/12(月) 17:01:03
こんな感じかなあ。(以下は Linux でシェルは bash 3.00.16 使ってます)。

$ perl -e 'print "abc\ndef\nghi"' >a
$ od -c a
0000000 a b c \n d e f \n g h i
0000013
$ cat a | while read s ; do echo "* $s" ; done
* abc
* def
$ ( cat a ; echo '' ) | while read s ; do echo "* $s" ; done
* abc
* def
* ghi
$ awk 1 a | while read s ; do echo "* $s" ; done
* abc
* def
* ghi
$


277 :デフォルトの名無しさん:2006/06/13(火) 11:26:53
>>272
数日前のファイルは無条件に削除という認識ではあってるのですが
ディレクトリの指定をする場合にはどのようになりますか?

278 :デフォルトの名無しさん:2006/06/13(火) 12:03:13
>>277
man で調べりゃいいじゃないか。


279 :272:'.'はカレントディレクトリとその配下:2006/06/13(火) 12:12:52
>>277
取り敢えずディレクトリ指定しているんだけどなぁ。

280 :デフォルトの名無しさん:2006/06/13(火) 13:19:34
>>279
例えば、フォルダを指定した場合(/tmp)
find /tmp -mtime +1 -exec rm {} \;
上記で/tmpディレクトリ以下の1日以上経過したファイルの削除が行われる
と思って、よろしいのでしょうか?

281 :デフォルトの名無しさん:2006/06/13(火) 14:05:59
ttp://www.google.com/search?hl=ja&q=manpage+of+find&lr=lang_ja

282 :デフォルトの名無しさん:2006/06/13(火) 14:19:50
「(::´┏┓`:)なんでそんなに英語を使ってやんのが好きなの?」

283 :デフォルトの名無しさん:2006/06/13(火) 14:52:23
>>280
何が消されるのか不安なら -exec から後ろをなくしてみればいい。


284 :デフォルトの名無しさん:2006/06/13(火) 16:54:29
>>280
どうして、マニュアル見て自分で確認せずに聞いて済まそうとするかねえ。
嘘教えられて、重要なファイル消すはめに陥ったらどうするんだよ。

285 :デフォルトの名無しさん:2006/06/14(水) 16:04:58
初歩的なことを一つ教えてください。

bshで関数定義したものを別のシェルで呼び出すことは出来ますか?
出来るとすると呼び出し方はどのようになりますでしょうか。

286 :デフォルトの名無しさん:2006/06/14(水) 17:02:26
できます。
関数が入ったファイルfoo.shをbar.shの中で使いたければ、bar.shの中で
. ./foo.sh
などとすれば普通に呼べます。

287 :デフォルトの名無しさん:2006/06/14(水) 17:06:41
なんだ別のシェルって、そういう意味か。

シ ェ ル ス ク リ プ ト っ て 書 け よ。


288 :デフォルトの名無しさん:2006/06/14(水) 21:09:56
bshスクリプトを/bin/sh以外のシェル、たとえばcshから呼べますか?だったら
「呼べない」が答えですな。というか、そういう質問なのか?

289 :285:2006/06/15(木) 00:14:48
bshで書かれたシェルスクリプト内の関数を、
別のbshで書かれたシェルスクリプトで使用することはできますか?

ということで・・・(´・ω・`)

290 :デフォルトの名無しさん:2006/06/23(金) 14:19:28
while文で一つのリストファイルから呼び出しをかけて、ループさせることは
可能だと思うのですが同じwhile文中で違うリストファイルから呼び出しをかけて
変数として扱うことは可能でしょうか?

291 :デフォルトの名無しさん:2006/06/24(土) 01:05:24
リストファイルって?
呼び出しって?
かけるって?


292 :デフォルトの名無しさん:2006/06/24(土) 13:18:35
>>290の要求がどうなのかは知らんけど、俺も心当たりある。

... | while read var; do ...; done
っていうパターンあるじゃんか。そうじゃなくて
while [ ... ]
do
if [ ... ]; then read var1 ただしファイルディスクリプタ1(パイプやファイル)から;
else read var2 ただしファイルディスクリプタ2(別なパイプやファイル)から;
fi
done
のようなことをやりたいと思うことはあったわ。

俺はexecによるディスクリプタコピーととサブシェルプロセスを組み合わせて
やろうとして挫折して、perlに日和った。

293 :デフォルトの名無しさん:2006/06/25(日) 02:48:36
sudo等でパスワードを求めるプロンプトに
expect以外で自動入力する方法はありますか?


294 :271:2006/07/03(月) 10:12:10
教えていただいた通りにやってみたのですがディレクトリを削除しようとします。
find /tmp -mtime +1 -exec rm {} \;
ディレクトリ内のファイルのみ削除させる方法はあるのでしょうか?
よろしくお願いします。

295 :デフォルトの名無しさん:2006/07/03(月) 10:42:10
-type f

296 :271:2006/07/05(水) 10:00:59
どうやっても上手く動作しません。
どうやってもエラーが出てしまいます。
エラーの出ない方法があれば、御教示願います。
よろしくお願いします。

297 :デフォルトの名無しさん:2006/07/05(水) 11:18:04
>>296
>>295

298 :271:2006/07/05(水) 11:31:26
何度もすみません。
295さんの使い方が良くわかっていませんでした。
-type fとすることでファイルを見るというオプションだったのですね。
これで解決することができました。ありがとうございます。

299 :デフォルトの名無しさん:2006/07/06(木) 12:01:34
DSCN0001.jpg〜DSCN9999.jpgのファイルを全てtravel2006GW0001.jpg〜travel2006GW9999.jpgに変更したいのですが
これを実現するLinuxのシェルスクリプトはどう記述したらいいですか?
それと
travel2006GW0001.jpg
travel2006GW0002.jpg



のようにtxtに打ち出すのもお願いします


300 :デフォルトの名無しさん:2006/07/06(木) 13:16:58
>>299

マルチ死ね。これだからLinux使いの糞は... (ry

301 :デフォルトの名無しさん:2006/07/06(木) 13:23:53
もう用済みじゃぼけぇwww

302 :デフォルトの名無しさん:2006/07/06(木) 14:08:25
>>300
用済みなのは君だけ

303 :デフォルトの名無しさん:2006/07/06(木) 23:21:48
>>299
#!/bin/sh
echo # | tee foo$$
cd $1
ls DSCN*.jpg | sed -e 's/\(.*\)\([0-9][0-9]*\)\(.*\)/mv \1\2\3 travel2006GW\2\3/' | tee -a foo$$
source foo$$
rm foo$$

304 :デフォルトの名無しさん:2006/07/07(金) 08:21:44
>>299
$ for i in `seq -w 1 9999` ; do
for> mv DSCN${i}.jpg travel2006GW${i}.jpg
for> echo travel2006GW${i}.jpg
for> done > list


305 :デフォルトの名無しさん:2006/07/13(木) 14:49:15
>>299

#!/bin/sh
for f in DSCN*.jpg
do
 f2=`echo $f | sed 's/DSCN/travel2006GW/'`
 echo $f2
 mv $f $f2
done


306 :デフォルトの名無しさん:2006/07/13(木) 16:41:26
>>305
>f2=`echo $f | sed 's/DSCN/travel2006GW/'`

f2=${f/DSCN/travel2006GW}
でいいんじゃねんか

307 :デフォルトの名無しさん:2006/07/13(木) 18:24:56
>>306
ああ、そうだ。bash はそれで行ける。


308 :デフォルトの名無しさん:2006/07/14(金) 15:56:42
Bシェルを使用しています。
質問させてください。

ファイル(hoge.dat)の中のデータが下記のように3行あるとします。
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15

この中から「8,9,10」だけを取りたいと思っています。

cut -d "," -f3- $hoge.dat
では

3,4,5
8,9,10
13,14,15

を取って来るのですが、何かよい方法はないでしょうか?

よろしくお願いします。

309 :デフォルトの名無しさん:2006/07/14(金) 17:59:15
そのあと普通に grep かますんじゃ駄目なの?
cut -d "," -f3- $hoge.dat | grep '8,9,10'



310 :デフォルトの名無しさん:2006/07/14(金) 18:23:08
だよな
何を根拠に8,9,10なのか何も書かずにいたら
echo 8,9,10
だってりっぱな回答だ

311 :デフォルトの名無しさん:2006/07/14(金) 19:00:32
これでどうだ!

awk -F, 'NR==2{for(i=3;i<=NF;i++)if(s!="")s=s","$i;else s=$i;print s}' hoge.txt

でも、未確認。


312 :デフォルトの名無しさん:2006/07/14(金) 20:50:24
これでも喰らえ!
head -2 hoge.txt | tail -1 | sed 's/....//'

313 :デフォルトの名無しさん:2006/07/14(金) 21:06:11
マジレス
grep -v 1,2 hoge.txt | grep -v 11 | cut -b 5-10

314 :デフォルトの名無しさん:2006/07/14(金) 21:37:57
head -c 21 hoge.txt | tail -c 7

315 :デフォルトの名無しさん:2006/07/14(金) 22:33:44
クマー
echo `sed -e 's/$/,/' hage.dat` | cut -d "," -f8,9,10

316 :デフォルトの名無しさん:2006/07/14(金) 23:29:04
こっちのほうがいいや。
sed -ne '1h;1!H;${x;s/\n/,/g;p}' hoge.dat | cut -d "," -f 8-10

317 :デフォルトの名無しさん:2006/07/18(火) 09:56:22
ええい。これでどうだ。

perl -ne 'if($.==2){chomp;print join(",",(split/,/)[2..4])."\n";}' hoge.dat

ていうか >>308 はどこ行った?

318 :Linax初心者:2006/07/24(月) 23:32:10
b-shallとc-shallで入力された日付が有効かどうかの確認のシェルスクリプトを作りたいのですがうるう年の計算や入力された日付が正しいかどうか判断して
正しい日付を入力させるスクリプトなんですが、初心者でわかりませんので
よろしくお願いします。


319 :デフォルトの名無しさん:2006/07/24(月) 23:42:20
>>318
なんか死ね。

320 :デフォルトの名無しさん:2006/07/25(火) 01:03:54
Linaxに関しては我々も初心者なもので・・・

321 :デフォルトの名無しさん:2006/07/25(火) 01:25:39
えーと、スクリプトを作りたいと言うことは理解できました。
で、なにをお願いされたらよいのでしょう。

322 :Linax初心者:2006/07/25(火) 06:33:39
すいません初心者で。まずは日付をキーボードから
入力して存在する日付かどうか判断して、うるう年の
計算して入力された日付が正しければ、正常表示を
間違いなら、再入力を促すものです。たとえば20061313はありえない
日付ですが20060220は正しい日付でその年がうるう年かどうか
判断して2006年 2月20日 水曜日と表示したいのですが
教えていただけますか。よろしくお願いします

323 :デフォルトの名無しさん:2006/07/25(火) 08:45:49
えーと、なにを教えればよいのでしょう。

324 :Linax初心者:2006/07/25(火) 09:42:19
すいませんが、会社の嫌がらせでまったくコンピュータ
したことがパソコンぐらいの45才です。リストラされそうなのですが
まったく知識がなくて本を読んでもよくわかりませんから
できましたらはじめから教えていただけませんか。
お願いします。うるう年の計算がわかりませんしその日が何曜日かも
わかりませんのでよろしくお願いします

325 :デフォルトの名無しさん:2006/07/25(火) 09:55:25
>>324
それ以外にも足りん能力がわんさかあると見受けられるので、あきらめてホームレスって下さい。

326 :デフォルトの名無しさん:2006/07/25(火) 10:16:18
とても45歳に見えない若々しいおじ様なのかしら♪

327 :デフォルトの名無しさん:2006/07/25(火) 20:40:45
しかもマルチポスト

どうやって釣られてあげればいいのかな?

328 :デフォルトの名無しさん:2006/07/25(火) 22:15:54
まずはマスタファイルを作るんだ

20060725,火
20060726,水
20060727,木
20060728,金
 :
 :


あとはわかるな?

329 :デフォルトの名無しさん:2006/07/25(火) 22:33:45
そうそう、マスタファイルを作るスクリプトを作ればかなり効率が上がるよ


330 :デフォルトの名無しさん:2006/07/28(金) 21:58:18
ディレクトリがさ
abc/ def/ ghi/
ってな風に同じ階層に3つあって、それぞれの中に
srcに対応したMakefileがあんだけどmakeすると
abc/ def/ ghi/  ~lib.a
とか自ディレクトリより一つ上に生成されてるのよ
んでabc、def、ghiどれmakeしても同じ名前のライブラリ作ってんだけど

これ作った人は何したかったのかわかんねぇ?

これが今日発生したバグですた・・・。
ぼすけてw


331 :デフォルトの名無しさん:2006/07/30(日) 22:56:47
>>330
お前にはうかがい知れないすごい思想なのは分かった。


332 :デフォルトの名無しさん:2006/07/31(月) 09:15:04
sed -f henkan.txt input.txt のhenkan.txtの部分を
ヒアドキュメントで書く方法ないでしょうか。無いか。
たんにテキストファイル増やすのが面倒なだけなんですが…

333 :デフォルトの名無しさん:2006/07/31(月) 11:13:36
>>332
もしかして、sedスクリプトのコメントをスクリプトファイルに入れたいって話?
それともその行が書かれたシェルスクリプト内にコメントを入れたいって話?
シェルもsedもコメントは#で始まるから、どちらの場合も好きなところに書けばいいとおもうが。

334 :デフォルトの名無しさん:2006/08/01(火) 00:07:14
>>333
はぁ?

335 :デフォルトの名無しさん:2006/08/01(火) 04:00:04
>>332
複数処理なら、以下の何れかでいけると思う。

1) sed -e '処理1' -e '処理2' ... file

2) sed '
処理1
処理2
....
' file
※ 複数行をシングルか、ダブルの引用符で囲む
    囲みの中が複数行でも、sedには1つの引数として渡される

3) sed '処理1^J処理2^J...' file
※ ^J は vi で入力するなら ctrl+ESC 後に ctrl+J

OSの違いやsedのバージョンによっては駄目な方法もあるかも
シェルによって駄目とかはないと思うが、c系は自信ない

336 :335:2006/08/01(火) 04:16:53
>>332
追加でこんなんでもいいわけだが・・・

4) sed '処理1' file | sed '処理2' | sed ...

つうか、何がしたいの?
複数処理をしたいんじゃないならスレ汚し、すまんす



337 :335:2006/08/01(火) 04:28:16
ついでだからもう一つ、スレ汚しすまん
ヒアドキュメントに拘るなら、sedの代わりにedかex使え

ed file <<EOF
...
EOF


338 :デフォルトの名無しさん:2006/08/01(火) 10:14:10
332です。ありがとうございます。
これだけ方法があるのにsedのmanを見て何も思い付かなかった
頭の悪さに恥じ入るばかりでございます

339 :デフォルトの名無しさん:2006/08/02(水) 06:38:49
>>335
処理の中身にもよるが、こういう書き方でもたいていは動くはず。
一行でかけるし、プロセスを一つにまとめられるのでわりとお勧め。

$ sed '処理1; 処理2; 処理3; ...' file

340 :デフォルトの名無しさん:2006/08/02(水) 08:28:05
>>339 プロセスを一つにまとめられるので

それじゃまるで>>335はプロセスが一つじゃないと言ってるように聞こえる。

341 :デフォルトの名無しさん:2006/08/02(水) 14:19:39
>>340
そういやプロセスが複数なのは >>336 だけだったな。
レス番を間違えた


342 :デフォルトの名無しさん:2006/08/02(水) 22:11:20
>>339
みんなが4000行かかるプログラムをたった1行で書いてやるぜ!的な。

343 :デフォルトの名無しさん:2006/08/02(水) 22:49:29
よーし、俺がたった1行でコンソール埋め尽くしちゃる
echo *{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}


344 :デフォルトの名無しさん:2006/08/03(木) 11:12:37
毎月定期的に取得しているファイル名を、例えば、
filename_`date +%Y%m%d`.txt
などとして日付けを付けて保存しています。
これが先月のものと差がない場合、新しい方を破棄したくて、
date コマンドで先月の同じ日を吐き出すことができないかと思っているのですが、
date は現在の日付けを表示することしかできないのでしょうか?具体的には、
diff filename_20060801.txt filename_20060701.txt
で内容が完全に同じだったら、filename_20060801.txt を削除するようにしたいです。
環境は Linux、kernel-2.6.9-34 です。CentOS です。
どなたかアドバイスをお願いいたします。

345 :デフォルトの名無しさん:2006/08/03(木) 11:53:21
>>344
date -d "last month" +%Y%m%d

346 :デフォルトの名無しさん:2006/08/03(木) 12:32:05
うおお、それでいいんですか!
どうもありがとうございます。

347 :デフォルトの名無しさん:2006/08/03(木) 13:22:13
>>345
HPUXのdateはそんな便利な機能ないからうらやましいな。
前日とかならTZ変えればいいけど

348 :デフォルトの名無しさん:2006/10/12(木) 15:54:09
申し訳ありません。
cshで@引数が、空であるかどうかと、A引数が、数字(何桁でも可)のみ受けとる
という条件文を書きたいのですが、
@は、if ( $# -eq )や if(x$name =x)とやってもうまくいきません。
Aは、ダイレクトにif(0<=#1<=9) というやりかた?しかわかりません。

もうしわけないのですが、ご教授願えませんか?
ヒントや参考文献でもかまいません。宜しくお願いします。

349 :デフォルトの名無しさん:2006/10/12(木) 23:34:19
cshやめたらいいんじゃない

350 :デフォルトの名無しさん:2006/10/13(金) 17:12:45
>>348
1. 引数が空

if ( $#argv == 0 ) then
echo 空
else
echo なんかある。
endif

2. 数値かどうか

わかんねえ。こんな風にでもすれば?

set n = `echo "$argv[1]" | sed 's/[0-9][0-9]*//g'`
if ( '' == "$n" ) then
echo "$argv[1] は数値だ。"
else
echo "$argv[1] は数値ではない。"
endif


351 :デフォルトの名無しさん:2006/10/13(金) 18:56:57
>>350
ありがとうございます。大変助かります。
やはり、sedコマンド使うんですね。
sedとawkを使うべきかなと思いながら、
あまりよく分かっていなかったんです。

これから試してみます。

352 :デフォルトの名無しさん:2006/10/13(金) 20:31:27
>>351
本当は何か別の方法あるかも知れないけど、俺は知らない。

あと、その sed の使い方だとマイナス記号や小数点や数字と数字の途中にスペースが
あった場合とかが考慮されていないので、その辺は自分でなんとかして。


353 :デフォルトの名無しさん:2006/10/19(木) 10:01:09
cshの環境で、アプリケーションログを
/backup/apl -mtime +6 -exec rm {} \;
上記のようい週次バックアップしています。

これを、直近のデータのみリストアする場合、
(最新のデータのみで、あとはいらない)
どのような表現を使えばいいのでしょうか?



354 :デフォルトの名無しさん:2006/10/19(木) 21:09:43
日本語でおk

355 :デフォルトの名無しさん:2006/10/20(金) 22:47:35
rshについて質問させて頂きます。
ある書籍に以下の記述がありました。

$ STAT=`rsh hostname "sh -c 'ls; echo \\$?'"`

\マークが1個多いと思うのですが・・・。
正誤表には記載がありませんでした。
分かる方がいましたら是非回答をお願い致します。

356 :デフォルトの名無しさん:2006/10/21(土) 00:09:39
>>355
引数が二回展開されるから。

まず local のシェルが引数を展開して rsh に
(hostname) と (sh -c 'ls; echo \$?') を渡す。

で、rsh が hostname のシェルで (sh -c 'ls; echo \$?') を実行する。
この時にもう一度展開される。


357 :デフォルトの名無しさん:2006/10/21(土) 11:56:53
>>356
早速のご回答ありがとうございます。

>で、rsh が hostname のシェルで (sh -c 'ls; echo \$?') を実行する。
>この時にもう一度展開される。
ダブルクォーテーションで囲まれた中の$は、
シェルによってメタキャラクタと認識されてしまうので
\マークでクォートしなくてはいけないのですが、
シングルクォーテーションで囲まれた$は
メタキャラクタとは認識されないので、
\マークでクォートする必要はない、
というのが私の認識です。

よって、hostnameのシェルで実行される
(sh -c 'ls; echo \$?')の$はメタキャラクタとは
認識されないので、\マークは不要であると
思っています。

ご指摘の程よろしくお願い致します。

ちなみに今回の質問は、
書籍「入門UNIXシェルプログラミング 改訂第2版」
のP.132についてです。

358 :デフォルトの名無しさん:2006/10/21(土) 19:23:38
>>357
csh 系や zsh の挙動は良く知らないが
bash のクォート除去はそこまで賢くない。

ダブルクォートの中にシングルクォートがあっても
その中身は保護されない。

例)
$ echo "$SHELL" '$SHELL' "'$SHELL'"
/bin/bash $SHELL '/bin/bash'



359 :デフォルトの名無しさん:2006/10/21(土) 20:31:06
cshなんですが、
ヒアドキュメントの内容を変数に格納するのはどうやったらいいんでしょうか

360 :デフォルトの名無しさん:2006/10/22(日) 04:00:06
負の遺産を量産するな。shか最悪kshで書き直せ。
(t)cshが許されるのはログインシェルまで。

361 :359:2006/10/25(水) 13:13:03
古いsoralisのメンテしてる上に周りがcshしか理解できないんで仕方なく・・・
本当はbash使いたいんですけどね



362 :デフォルトの名無しさん:2006/10/29(日) 15:43:34
別に仕方ないことないだろに。


363 :デフォルトの名無しさん:2006/10/29(日) 18:22:40
>>356
エスケープの処理はバッククォートとダブルクォートのときじゃないか?
rshが受け取る文字列は(sh -c 'ls; echo $?')だと思うんだけど。

(STAT=`rsh hostname "sh -c 'ls; echo \\$?'"`)
ローカルのシェルが、バッククォートとして実行する文字を解釈 -> (rsh hostname "sh -c 'ls; echo \$?'")
バッククォートが、rshを呼び出す為に引数を展開 -> (hostname) (sh -c 'ls; echo $?')
rshがhostnameに入って、ホストのシェルで第二引数を実行 -> (sh -c 'ls; echo $?')
sh -c の処理 -> (ls; echo $?)

>ダブルクォートの中にシングルクォートがあっても
>その中身は保護されない。
ダブルクォートの中のシングルクォートは単なる文字なのでこれはこれで合ってるけど。



364 :デフォルトの名無しさん:2006/10/29(日) 23:14:19
>>363
bash の man を参照するとわかるがクォートの除去は
各種展開が終わってから行われる。
冗長に処理の流れを書くとこうなる。

1. コマンド実行 -> (STAT=`rsh hostname "sh -c 'ls; echo \\$?'"`)
2. ローカルのシェルがコマンド置換(バッククォートの処理)を行う -> (rsh hostname "sh -c 'ls; echo \\$?'")
3. サブシェルが起動してバッククォートの中身を展開する -> (rsh) (hostname) (sh -c 'ls; echo \$?')
4. サブシェルが rsh に引数 (hostname) (sh -c 'ls; echo \$?') を渡す
5. rsh が hostname のシェルに (sh -c 'ls; echo \$?') を渡す
6. hostname のシェルが引数を展開する -> (sh) (-c) (ls; echo \$?)
7. hostname のシェルが sh に (-c) (ls; echo \$?) を渡す
8. sh が引数を展開、実行する -> (ls; echo $?)
9. sh -> hostname のシェル -> rsh -> サブシェルの順に返り値が渡り、コマンド置換が終了
10. STAT に返り値が代入される

365 :デフォルトの名無しさん:2006/10/30(月) 02:27:55
>>364
> bash の man を参照するとわかるがクォートの除去は
> 各種展開が終わってから行われる。
EXPANTIONSのとこにあるこれ?
The order of expansions is: brace expansion, tilde expansion, parameter, variable and arithmetic expansion and
command substitution (done in a left-to-right fashion), word splitting, and pathname expansion.

ここにあるのは、どの順で実行されていくかの説明で、クォートの解釈は別の段階だぞ。
Expansion is performed on the command line after it has been split into words.
ってあるとおり、(1)シェルが一行読み込まれる → (2)単語への分割 → (3)各要素を展開する
のうち(2)の話だ。(3)にある単語分割とは別物
#1行じゃない場合はちょっとおいといてくれ


> 2. ローカルのシェルがコマンド置換(バッククォートの処理)を行う -> (rsh hostname "sh -c 'ls; echo \\$?'")
これの前に単語への分割があって、バッククォートを使っているとバックスラッシュの前にあるバックスラッシュはエスケープとして扱われるから、
(STAT=`rsh hostname "sh -c 'ls; echo \\$?'"`) -> (STAT) (=) (`rsh hostname "sh -c 'ls; echo \$?'"`)
この段階でバックスラッシュは一個になる。
(っていうか、そうじゃないと入れ子になったバッククォートの範囲を確定できないし)

コマンド置換の展開が実行されると、サブシェルがまた単語への分割を実施して、
今回はダブルクォートのルールに従ってバックスラッシュは$に対するエスケープ文字になる。
(rsh hostname "sh -c 'ls; echo \$?'") -> (rsh) (hostname) ("sh -c 'ls; echo $?'")


「bash -v -x」してから「echo `echo "'\\$abc'"`」ってやってみ。
読み込んだ文字と、展開結果が出てくる。
サブシェルが読み込んだ文字列は
echo "'\$abc'"
になってて、すでに一回バックスラッシュが処理されてる。

366 :デフォルトの名無しさん:2006/10/30(月) 03:36:14
>>365
ほー、そうだったのか。
やっぱりこういう事は自分で検証しないとダメだな。
的確な突っ込み感謝。

367 :デフォルトの名無しさん:2006/10/30(月) 12:33:25
>366
そういや、肝心の355はどこいったんだ?

368 :デフォルトの名無しさん:2006/11/02(木) 23:45:43
355です。

はっ!、と思って只今本スレを確認しました。
しばらくの間に様々な回答を頂き、本当にありがとうございます。
これからじっくり読ませて頂きます!

369 :デフォルトの名無しさん:2006/11/04(土) 20:27:36
微妙にスレ違いかもですが

あるファイルに対する処理をパイプで繋げて、
最終的に同名のファイルに書くのはアリなんでしょうか

cat hoge.txt | grep "foo" | uniq | sort > hoge.txt

現状動いてはいるんですが・・・

ちなみにbashです


370 :デフォルトの名無しさん:2006/11/04(土) 21:33:13
>>369
途中のコマンドがエラーを吐くと空になるが、いいのか?

期待通りに動いているのなら、アリではあるが
どこの環境でも動くという保証は無い。

俺ならいったん変数に入れてから書き出すかな。

a=`grep "foo" hoge.txt | sort -u`

if [ -n "$a" ] ; then
echo "$a" > hoge.txt
fi

371 :デフォルトの名無しさん:2006/11/04(土) 21:35:18
あ、よく考えたら uniq | sort と sort -u は違うな。
適当に読み替えてくれ。

372 :デフォルトの名無しさん:2006/11/04(土) 21:37:33
>>369
>最終的に同名のファイルに書くのはアリなんでしょうか
ダメ。


373 :デフォルトの名無しさん:2006/11/04(土) 23:26:40
特定の時間帯のログだけ抽出したい場合ってどうしたらいいんでしょうか?


374 :デフォルトの名無しさん:2006/11/04(土) 23:29:03
awk

375 :デフォルトの名無しさん:2006/11/05(日) 04:29:12
PM18::00からAM1:00までの場合はどうすれば?

376 :デフォルトの名無しさん:2006/11/05(日) 04:31:11
ログファイルの仕様は?

377 :デフォルトの名無しさん:2006/11/05(日) 04:34:07
やりかたはログによる

378 :デフォルトの名無しさん:2006/11/05(日) 04:46:30
2006/11/04,01:37:33,xxxxxxxxxxxxxxxxxxxxxxx
2006/11/04,02:37:33,xxxxxxxxxxxxxxxxxxxxxxx
2006/11/04,03:37:33,xxxxxxxxxxxxxxxxxxxxxxx
2006/11/04,04:37:33,xxxxxxxxxxxxxxxxxxxxxxx
2006/11/04,16:37:33,xxxxxxxxxxxxxxxxxxxxxxx
2006/11/04,21:37:33,xxxxxxxxxxxxxxxxxxxxxxx

こんなかんじ

379 :デフォルトの名無しさん:2006/11/05(日) 04:52:32
ぱっと思い付かないけど、俺ならperl使うかな。

ログをとる時間とタイミングが決まってるなら検討付けて
timeコマンドで1:00にtail -10とかでがばっと適当にログを切り出して保存する。

380 :デフォルトの名無しさん:2006/11/05(日) 04:56:47
>>378のフォーマットなら1行野郎でできる

awk -F '[,:]' '$2>=18||$2<1' logfile

381 :379:2006/11/05(日) 05:24:52
>>380
お前マジ頭いいな

382 :デフォルトの名無しさん:2006/11/05(日) 10:47:41
>>375
>PM18::00
それは一体何時なんだ?
もし、18時のことを書きたいなら6PMと書かないと意味が通じないわけだが。

383 :デフォルトの名無しさん:2006/11/05(日) 10:48:59
通じなくてよし

384 :デフォルトの名無しさん:2006/11/05(日) 14:16:24
なんか、awkの話になってるんで便乗で質問ですが

シェルスクリプトから

awk -f 手続きファイル 参照ファイル

とやって、-vでawkスクリプトに引数を渡してawk内で使用するのって具体的にはどうやればいいんですかね?



385 :デフォルトの名無しさん:2006/11/05(日) 14:28:58
・・・・・<dateAndTime>20061101130655</dateAndTime>・・・・・・・・・・・・・・・・・
・・<dateAndTime>20061101160213</dateAndTime>・・・・・・・・・・・・・・・・・
・・・・・・・・・<dateAndTime>20061101180159</dateAndTime>・・・・・・・・・・・・・・・・・
・・・<dateAndTime>20061102200159</dateAndTime>・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・<dateAndTime>20061103210159</dateAndTime>・・・・・・・・・・・・・・・・・
・・・・・・<dateAndTime>20061104220159</dateAndTime>・・・・・・・・・・・・・・・・・
・・・・・・・・・<dateAndTime>20061104131259</dateAndTime>・・・・・・・・・・・・・・・・・
・・<dateAndTime>20061104011359</dateAndTime>・・・・・・・・・・・・・・・・・
・・<dateAndTime>20061104052359</dateAndTime>・・・・・・・・・・・・・・・・・
・・・・・・・・・<dateAndTime>20061105062059</dateAndTime>・・・・・・・・・・・・・・・・・
・・・・<dateAndTime>20061106072159</dateAndTime>・・・・・・・・・・・・・・・・・
・・・<dateAndTime>20061106114359</dateAndTime>・・・・・・・・・・・・・・・・・
・・・<dateAndTime>20061107221359</dateAndTime>・・・・・・・・・・・・・・・・・
・・・・・・<dateAndTime>20061108230559</dateAndTime>・・・・・・・・・・・・・・・・・

ログがタグ形式で、こんな感じだったらawkではどうする?

386 :明日まで:2006/11/05(日) 14:36:03

こういうシェルを私みたいな女の子にも理解できるように解説してよ


引数付(1〜5)で実行したshellが何を引数として入力
  したかを,switch文を使って表示させたい。。

【その1】引数無し、もしくは引数が1〜5以外の場合
% ./test.sh
Invalid number.
%

【その2】引数が1〜5の場合
(5を入力した場合)
% ./test.sh 5
You have imput 5.

387 :デフォルトの名無しさん:2006/11/05(日) 14:52:33
>>384
たぶん勉強すればどうにかなるんだろうけど、
awkで引数に関することでごにょごにょするのがめんどくなったのでPerlに移った。
awkは短い命令やパイプラインで使ったりはするけど、引数でごにょごにょするのは
Perlでやることにした。

>>

388 :デフォルトの名無しさん:2006/11/05(日) 14:55:02
>>386
case文でnull,$1〜$5までのケース書いて、その他は(*にでも書けば良いじゃん

389 :デフォルトの名無しさん:2006/11/05(日) 15:30:16
>>384
別にawkに限った話じゃないので、普通に引き数で渡せば宜しい。
後は、awkかnawkかgawkか、変数定義かARGVを使うかの違いがあるだけ。

>>385
外部プロセスでsedを呼んで処理するか、awkを呼び出すシェルスクリプト側でsedを呼んで処理する。

390 :デフォルトの名無しさん:2006/11/05(日) 20:52:42
誰かこのシェル作って
今日中にやらないといけないんです、お願いします。

引数付(1〜5)で実行したshellが何を引数として入力
  したかを,switch文を使って表示させたい。。

【その1】引数無し、もしくは引数が1〜5以外の場合
% ./test.sh
Invalid number.
%

【その2】引数が1〜5の場合
(5を入力した場合)
% ./test.sh 5
You have imput 5.


391 :デフォルトの名無しさん:2006/11/05(日) 22:22:18
シェルスクリプトの中身↓

awk -f xxx.awk -v awkNoHensu=${shellNoHensu} aaa.txt


xxx.awkの中身↓

{
print ${awkNoHensu}
}

awkってよくわかんないけど引数ってこんなかんじでいけるのかな?
横レスですが、外部プロセスでsedを呼ぶってひょっとしてsystemコマンド(system関数)?

392 :デフォルトの名無しさん:2006/11/05(日) 23:29:32
awkはCのpopen()相当をかなり変態的かつシンプルな形で表現できる。
Ex.
--
#!awk -f
BEGIN {
if (ARGC > 1) {
cmd = "wc -l " ARGV[1];
cmd | getline fileLineCnt;
close(cmd);
}
}
{
if (fileLineCnt) {
printf("%d/%d %s\n", NR, fileLineCnt, $0);
}
}
--
sedで前処理するのも、これと同じ要領。

393 :392:2006/11/05(日) 23:33:02
おっと、折角だから最後のブロックを訂正。
--
{
if (fileLineCnt) {
printf("%d/%d:", NR, fileLineCnt);
}
print;
}
--
これでコマンドライン引き数がないときはただのフィルターになる。
#>392のは引き数がないと何もしなかった。

394 :デフォルトの名無しさん:2006/11/06(月) 02:23:46
>>391

awkスクリプトの中で参照するときに$つけなくてもよい。つかつけちゃダメ。
$つけたらフィールド参照になっちゃうから。

awk -v foo=ほげほげ ...

で渡したのなら、単に foo で参照できる。


395 :デフォルトの名無しさん:2006/11/06(月) 17:18:33
grepでは1行が2048バイトの制限がありますが、
awkやsedの制限はどうなっているのかどなたか教えてください


396 :デフォルトの名無しさん:2006/11/06(月) 20:23:22
知らない。不安なら perl 使っとけ。メモリの続く限り無制限だから。


397 :デフォルトの名無しさん:2006/11/06(月) 22:09:24
2048バイト制限のあるgrepって、どのgrepのこと?


398 :デフォルトの名無しさん:2006/11/07(火) 00:30:09
>>392
それはawk -v で引数を渡せばいいですか?

399 :392:2006/11/07(火) 03:18:46
めんどくさい香具師だなぁ。
>393のスクリプトにfooとでも名づけて実行ビット立てたら foo foo とでもして味噌。

400 :デフォルトの名無しさん:2006/11/07(火) 23:31:42
>>395
sedにも制限あったはず。それでperlにしたことがある。
てか試せ

401 :デフォルトの名無しさん:2006/11/07(火) 23:49:35
>>391
awkに-vでシェルの変数を引数で渡す場合、BEGIN内でしか参照できないからあんまり意味ないですよー
嘘言ってたらごめんなさい

402 :デフォルトの名無しさん:2006/11/08(水) 00:30:45
>>401
ぇ…(´Д`υ)
% awk -v foo=hello 'END { print foo }'
^Dhello
%

403 :デフォルトの名無しさん:2006/11/08(水) 01:25:16
−−−−−−−−−−−−−−−
BEGIN{}

/○○/{

print$1



END{}
−−−−−−−−−−−−−−−


○○のところにシェルから持ってきた変数って使えますかね?
使えたら変数によって検索条件を変えられるんでawk最強って話になるんですが。

404 :デフォルトの名無しさん:2006/11/08(水) 01:41:35
例えば,↓のようにできる

% cat emp.data
Beth 4.00 0
Dan 3.75 0
Kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18
% awk -v name=Kathy '$1 ~ name { print $2 }' emp.data
4.00
%

405 :デフォルトの名無しさん:2006/11/08(水) 01:50:47
>>395

GNU sed とか gawkなら多分制限はない(メモリの許す限り)。
SUSv3をみたところ、OSごとに一行の最大の長さを定義している
LINE_MAX という定数があって、そこまでは使えることが保証
されているだけみたい。

で、FreeBSDとSolarisはこのLINE_MAXは2048バイトのようだ。


406 :403:2006/11/08(水) 02:00:33
テキストをawkでカンマ区切りなどに成型した後ならそれはかなり使えそう技ですね。
しばし感心してしまいました。

でも、仮に以下のような感じのデータだったらやっぱできないんでしょうかね?
行にある、特定の文字列だけにヒットするような感じで。
たとえば/○○/のところに、BOOという引数を与えて、BOOを含む行だけ検索して特定の処理をするみたいな?

TXT
−−−−−−−−−−−−−−−
AAAAADSLADLAS
UEJNDNKA
KDJSALJDLKSA
HHHHHBOOA+aDSA
DSKAJDKASL
DSKLA+KDAS
−−−−−−−−−−−−−−−

AWK
−−−−−−−−−−−−−−−
BEGIN{}

/○○/{

何かしらの処理



END{}
−−−−−−−−−−−−−−−




407 :デフォルトの名無しさん:2006/11/08(水) 02:07:10
>>406
awk -v pattern=BOO '$0 ~ pattern { print }'

408 :デフォルトの名無しさん:2006/11/08(水) 13:59:33
>>403
そんなもんこうやって無理矢理やってしまえばできる。

awk '/'"$x"'/{ ... }'


409 :デフォルトの名無しさん:2006/11/08(水) 21:08:39
つうかもうちょっとawkを勉強して、試した上で聞けよな・・

410 :デフォルトの名無しさん:2006/11/09(木) 22:19:29
>>409
でも、Awk神がいるからか、
最近のこのスレの話の流れはなかなか為になってるよ。
まあ、シェルはある程度分かるが、
長年Awkを馬鹿にして敬遠してきた俺から言わせてもらえばだけどね。
んで、このスレ読んでAwkでも勉強してみようと思い立ち
オライリーの書籍を注文してしまったw
今思えば、俺が今まで仕事でやってきた案件なんぞ
PerlやRuby使うまでもないことばっかりってことが判明してちと鬱だがね・・・orz...

411 :デフォルトの名無しさん:2006/11/09(木) 22:25:23
ファイル処理に便利だしね
シェルスクリプト作ってた筈なのに
気がつくとawkとsedの処理が8割だった事がある


412 :デフォルトの名無しさん:2006/11/10(金) 00:34:43
下手な文字列処理なんかだと、Cで書くよりよっぽど早いしメンテナンスしやすいからな。

413 :デフォルトの名無しさん:2006/11/10(金) 13:50:16
うちの高専で半年くらいawkばっかりやらせてた測量学の教官がいた

414 :デフォルトの名無しさん:2006/11/10(金) 13:53:17

授業で

415 :デフォルトの名無しさん:2006/11/10(金) 15:36:22
ときどきでいいのでawkスレのことも思い出してあげてください。

http://pc8.2ch.net/test/read.cgi/tech/1023556171/

416 :デフォルトの名無しさん:2006/11/12(日) 16:23:26
>>410
「一寸、微笑ましい」という本心をコメントする。

417 :デフォルトの名無しさん:2006/11/13(月) 17:30:40
>>380
23:15〜03:15とか
04:30〜9:30とか
分の単位がある場合でも
一行で簡潔にかけたりする?


418 :デフォルトの名無しさん:2006/11/13(月) 19:14:24
>>417
awk -F '[,:]' '$2$3>="2315"||$2$3<"0315"' logfile

awk -F '[,:]' '$2$3>="0430"&&$2$3<"0930"' logfile

419 :デフォルトの名無しさん:2006/11/13(月) 21:42:59
>>417
$2>=23&&$3>=15||$2<2||$2<3&&$3<15
こんな感じの書き方をすりゃいいんでないの?とアドバイスをしようと思ったら
>>418がなんかすごい技を繰り出してて…恥ずかしくなってきた罠。

420 :デフォルトの名無しさん:2006/11/13(月) 21:59:53
>>412
AWKの文字列処理ってCより速いの?

421 :デフォルトの名無しさん:2006/11/13(月) 22:18:38
>418
-F ×
-f ○


422 :デフォルトの名無しさん:2006/11/13(月) 22:56:55
>>421
been opened if it were a file name. The option -v followed by var=value is
an assignment to be done before prog is executed; any number of -v options
may be present. The -F fs option defines the input field separator to be
the regular expression fs.
/usr/share/man/cat1/awk.1 line 26/250 (11%)

423 :デフォルトの名無しさん:2006/11/13(月) 23:05:47
>>421
コマンドラインで FS の設定をしてるから間違っとらんよ。

424 :デフォルトの名無しさん:2006/11/13(月) 23:38:44
リストファイルから一行ずつパターンを読み込ませて
テキストファイルを一行ずつパターン検索したいんですが
awkでファイルから入力する方法ってありますか?


425 :デフォルトの名無しさん:2006/11/13(月) 23:51:26
getline関数は現在の入力ファイルから次の入力レコードを $0 に代入する。
getline < file は file から次の入力レコードを $0 に代入する。
getline x は変数 x に代入する。
cmd | getline は cmd の出力を getline にパイプする。
getline は入力が成功すると1,ファイルの末尾で 0,エラーで -1 を返す。

426 :412:2006/11/13(月) 23:56:23
>>420
「速い」じゃなくて「早い」だ。つまり、どっちが早くプログラミングできるかってこと。

427 :デフォルトの名無しさん:2006/11/13(月) 23:57:53
変数を受け取って、一連の処理を行うようにしたコマンドの羅列だろ。
ひとつずつコマンドを打ち込んで処理するのが面倒くさいから
判定とか分岐とか呼び出しとかを使って、処理自体を複雑・多様化するようにしたんだろ。
更に、ひとくくりの処理を名前を付けて登録できるから、コマンドはそれひとつで
自分で組んだ複数の処理をしてくれる。

基本的に古臭いものだし、フロントエンドを設けてGUI化したのを
使うのが最適だと思うのに、何故に今更ながらのコマンドシェルなんだ?

馬鹿?

428 :デフォルトの名無しさん:2006/11/14(火) 00:08:47

〃∩ ∧_∧
⊂⌒( ・ω・)
 `ヽ_っ⌒/⌒c   はいはいわろすわろす
    ⌒ ⌒

429 :デフォルトの名無しさん:2006/11/14(火) 07:07:15
>>424
同じファイルの次行レコードをgetlineで読めるはずだけど
処理中に別ファイルは読めないんじゃないかな
fopenとかないし引数とらせるとかなら方法あるかもな

430 :デフォルトの名無しさん:2006/11/14(火) 07:37:30
>>429
>425

431 :デフォルトの名無しさん:2006/11/14(火) 19:44:15

パターンファイルに一致するレコードを削除したいのですが、どうやったら実現できるでしょうか?
シェルでもアークでも構いません。御指南下さい。

テキストファイル(テキスト.txt)
20061110,AAA
20061111,BBB
20061112,CCC
20061113,DDD







パターンファイル(パターン.ptn)
AAA
CCC
GGG

432 :デフォルトの名無しさん:2006/11/14(火) 19:45:09
>シェル
失せろ

>アーク
消えろ

433 :デフォルトの名無しさん:2006/11/14(火) 20:35:18
% cat foo.awk
BEGIN {
    while (getline < ptn == 1)
        pattern[n++] = $0
}

{
    for (i = 0; i < n; i++)
        if ($0 ~ pattern[i])
            break
    if (i == n)
        print
}
% awk -f foo.awk -v ptn=pattern.ptn text.txt
20061111,BBB
20061113,DDD
20061114,EEE
……

434 :デフォルトの名無しさん:2006/11/14(火) 20:51:08
grep -v -f パターン.ptn テキスト.txt

435 :デフォルトの名無しさん:2006/11/14(火) 21:52:58
>431
アークじゃないよ。
オークって読むよ。


>433
awkって何でもできるんだな。

436 :デフォルトの名無しさん:2006/11/14(火) 22:07:46
>>415にも書いてるけどawkスレも使ってやってください。
awkについて語るスレ
http://pc8.2ch.net/test/read.cgi/tech/1023556171/

437 :デフォルトの名無しさん:2006/11/14(火) 23:03:02
>>433
オークってよむんですか。
ありがとうございます。

438 :デフォルトの名無しさん:2006/11/15(水) 00:37:29
bashなんですが、daemonの起動スクリプトとかで
変数にブレースがついてたり、ついてなかったりするのは
どういう意図があるの?

439 :デフォルトの名無しさん:2006/11/15(水) 00:58:40
>>438
1. 変数と文字列を明示的に区切りたいから
ex) ${foo}bar

2. ブレース展開を使っている
ex) ${foo%.*}

3. ただの気まぐれ

440 :デフォルトの名無しさん:2006/11/16(木) 00:52:32
getline 変数 で、次のレコードを読んで変数に代入になると思いますが、
更にgetline 変数を使うと更に次の行が読み込まれるのでしょうか?
そのあとawk処理を終えて次のレコードをawkが読みに行ったとき、getlineの影響を受けて読んでいる行が進んでしまいますか?

AWKスクリプト

getline A
PRINT A
getline A
PRINT A


読み込みファイル
AAAAA
BBBBB
CCCCC
DDDDD

出力結果はこう?
AAAAA
BBBBB
CCCCC
DDDDD

出力結果はこう?
AAAAA
BBBBB
BBBBB
CCCCC
CCCCC
DDDDD

441 :デフォルトの名無しさん:2006/11/16(木) 00:57:16
やってみればいいじゃん。
つーか、シェルからの起動も絡まないawkの話はawkのスレでやれよ。

442 :デフォルトの名無しさん:2006/11/16(木) 01:02:20
スレ名変えればいいだろ、

【シェルって】サーバ用途のスクリプト【貝殻?】

443 :デフォルトの名無しさん:2006/11/16(木) 01:07:00
sedなんかを使って特定のタグで囲まれたところを出力することって可能ですか?

sdak;dkslakdas;das<TAG>dkalkdlas;kdsla;kds;akdsal;dkslad;</TAG>dlaskldkalsfocmdcsdlc,ds



444 :デフォルトの名無しさん:2006/11/16(木) 01:12:20
行内に開始タグ終了タグが1セットだけあるなら、
sed -ne 's/<TAG>\(.*\)<\/TAG>/\1/p'

445 :デフォルトの名無しさん:2006/11/16(木) 01:14:40
>>441
たとえば>433のawkスクリプトでやってることをシェルスクリプトで実現したらどうなるかとかってのを
>441自身が率先してレスしてやるとかすればこのスレももっと進歩するんじゃないの?
絡まない話と切って捨てるのではなく絡める努力なんてこともしてみたらいかがか?

446 :デフォルトの名無しさん:2006/11/16(木) 01:20:07
AwkにはSYSTEM関数もあるし
UNIXのコマンドも使えちゃうので
必ずしも無関係とは言えないか

447 :デフォルトの名無しさん:2006/11/17(金) 00:46:21
寂しいスレになったね。

448 :デフォルトの名無しさん:2006/11/28(火) 00:16:29
あるファイルの一部(何行もある)を違うファイルに書き換えるのはどうやるの?
例えば、

aaa aaa aaa
aaa aaa aaa
abc 1 2
abc 3 4
bbb bbb bbb

というファイルを

abc 1 10
abc 3 20

と言うファイルを使って

aaa aaa aaa
aaa aaa aaa
abc 1 2 10
abc 3 4 20
bbb bbb bbb

にしたいんだけど。。
どえらく行があって普通にsedの置換する行を書かせて実行したら
一日で終わらないくらい時間がかかってしまって。。。
もしくは、行単位で置換じゃなくて、数行単位で置換は出来ないのでしょうか?

偉い人教えてください。

449 :デフォルトの名無しさん:2006/11/28(火) 02:05:01
>>448
正直説明が分かりづらいです。
というか全くわかんない。
ちゃんと質問した方が良い。
その質問じゃ法則がいまいちわからない。

ファイルの一部を違うファイルに書き換える??
catとか使って結合したらいかが?

450 :デフォルトの名無しさん:2006/11/28(火) 02:11:28
マルチ乙

451 :デフォルトの名無しさん:2006/11/28(火) 11:34:00
>>448
それはスペース区切りで先頭の項目をキーにして残りのデータは重複なしで
マージするという処理をしたいということか? あれ? でも、 aaa とかは
元から重複してるな。

駄目だ。やっぱ法則が分からん。


452 :デフォルトの名無しさん:2006/11/28(火) 14:02:55
>>448

二つのファイルを第1フィールドと第2フィールドを“,”とかでくっつけて
(それぞれ test1.txt, test2.txt とする)、join(1) する:

 join -a1 test1.txt test2.txt

最後に“,”を削る。

それか、awk の連想配列を使って join する。

453 :デフォルトの名無しさん:2006/11/28(火) 23:56:25
回答ありがとうございました。
分かりずらかったかと思いますので再度書き込ませてください。

一連の序列が混ざったファイルがあります。
例えば、
aaa bbb ccc ddd
.
ccc ddd eee fff
.
こんな感じの序列が続いた後に
linux 123 987 786 0
linux 123 903 673
linux 123 876 986 0
.
linux 234 983 934 0
linux 234 073 345 0
.
linux 345 093 945 0
linux 345 495 384
.
xyz abc def ghi
xyz ade dfe sdg
.
となっていて変えたいところはlinux〜です。

454 :デフォルトの名無しさん:2006/11/28(火) 23:57:11
ここの行を
linux 123 987 786 22
linux 123 903 673 22
.
linux 234 983 934 85
linux 234 073 345 85
.
linux 345 093 945 45
linux 345 495 384 45

としたいのです。
最後の0はあったりなかったします。
最後の行に各々の22,85,45を追加(または0を置換)したいのです。
2列目は123,234,345のようにまとまりがあります。
あとはランダムです。
存在するファイルは
123 22
234 85
345 45
.
というファイルです。

455 :デフォルトの名無しさん:2006/11/28(火) 23:59:27
自分は一行ずつ置換するためsedを作成するためのプログラムを作成しました。
ですが、数が一万行を超えるので、一日ではとても終わらないものになりました。
ファイルを分割してlinuxを含まない上下のファイルをとっておいて、
置換ではなくてlinux〜のファイルを作ってしまいcatで付けようとか考えていますが、
cutとかで分割する際にそんな指定って出来るんでしたっけ?
質問ばかりですいません。
宜しくお願いします。

456 :デフォルトの名無しさん:2006/11/29(水) 00:10:55
追加ですが、
linux 123 987 786 22
linux 123 903 673 22
.
linux 234 983 934 85
linux 234 073 345 85
.
linux 345 093 945 45
linux 345 495 384 45
というファイルは作成出来るのですが、
これを元のファイルに反映させたいです。
手動でやるしかないですかね。。。

457 :デフォルトの名無しさん:2006/11/29(水) 00:21:19
元ファイルをtest1.dat 参照ファイルをtest2.datとして
join -a1 -o 1.1 1.2 1.3 1.4 2.2 test1.dat test2.dat
とすればいいですかね。。。
joinは使ったことが無いので分かりませんが。。。

458 :デフォルトの名無しさん:2006/11/29(水) 08:07:28
例示ばかりで、肝心の変換のための法則について
何も書かれちゃいねぇ!

「変えたいところは」「ここの行を…としたい」
「あったりなかったりします」

場所と結果だけ示されてもねぇ。。

459 :デフォルトの名無しさん:2006/11/29(水) 08:12:43
ここはこうだから、これをこれと入れ換えます。
という説明はできないもんだろうか。

関係ないけど先日会社に面接に来た香具師。
「自己アピールは大切ですから」と言いつつ何ら具体的なことは何も言わないで帰った。
要は、客観視できていないし説明することもできないらしい。
#そのくせ、ランバ・ラルの台詞を語ってはいたのだが。

460 :デフォルトの名無しさん:2006/11/29(水) 08:17:11
何か耳が痛いな。

461 :デフォルトの名無しさん:2006/11/29(水) 08:23:42
言語機能の差が、スクリプト処理の決定的差ではないという事をおしえてやる

462 :デフォルトの名無しさん:2006/11/29(水) 11:23:46
1万行の処理なんて一瞬で終わると思うんだが……
仮に行数Lに対して実行時間が O(L^2) だとしてもちょっと待てば終わるくらいだと思

463 :デフォルトの名無しさん:2006/11/29(水) 12:06:13
すごい遅いマシン使ってるのかな?

464 :デフォルトの名無しさん:2006/11/29(水) 17:32:54
シェルスクリプトじゃないけど。awkでやってみた。
BEGIN{
while(getline<ARGV[2]){
cv[$1]=$2;
}
ARGV[2]="";
}
$1=="linux"{
$5=cv[$2];
}
{
print;
}


465 :デフォルトの名無しさん:2006/12/05(火) 21:39:41
csh で if($hoge == hoge) とかやったばあい、
$hoge が -f などの場合
ファイルに関する演算子の -f とみなされて
比較してくれません。
こういう場合、どうすればいいのでしょうか?

466 :デフォルトの名無しさん:2006/12/05(火) 22:17:11
あ、適当な文字を両辺の先頭に付ければいけますね。
何か格好悪いので、もっといい解決法があればよろしくお願いします。

467 :デフォルトの名無しさん:2006/12/06(水) 22:42:36
ファイル名の拡張子より前の名前を抽出するシェルを作っています。
例えばtest.shであれば

ls test.sh | awk -F '[.]' '{print $1}'
でtestと出力が得られるのですが、もしファイル名がtest_1.00.shの時は
test_1
のような出力になってしまいます。

awkの$NFで拡張子のshは得られるのですが、
$NF「以外全て」を出力を得るにはどのようにすればよいでしょうか?

468 :デフォルトの名無しさん:2006/12/06(水) 22:48:02
>>467
man basenameでだめなんか。
それから、シェルスクリプトのことをシェル呼ぶなってば。

469 :デフォルトの名無しさん:2006/12/06(水) 22:49:51
シェルスク?
シェクリ?
ルスクリ?

470 :デフォルトの名無しさん:2006/12/06(水) 23:02:51
>>468
できますた。
ありがとうございました。

471 :デフォルトの名無しさん:2006/12/06(水) 23:13:44
>>467
awkでやるなら
jgawk -F. "{print jsubstr($0,0,jlength($0)-jlength($NF)-1)}"
でどう?

472 :デフォルトの名無しさん:2006/12/06(水) 23:28:06
>>471
試してみたのですが残念ながら、現在の環境ではjgawkというのが入ってないみたいです…
basenameはcaseで知ってる拡張子を洗いざらい場合分けするスクリプトかいて処理しました。
(txt f90 c c++ java shなど)

jgawkのインストールについて調べてみます

473 :デフォルトの名無しさん:2006/12/06(水) 23:29:05
c++じゃなくてcppだった…

474 :デフォルトの名無しさん:2006/12/06(水) 23:34:47
ちなみにローカルな目的は、
a2psを使ってpsファイルを作る事でした。

a2ps test1.00.sh -o test1.00.ps

拡張子を取り除いてpsの拡張子を付けるためのスクリプトを作る方法を考えていました。
basename&case文で対応はできたのですが、jgawkというのが使えるのであれば
より汎用性のあるスクリプトができそうですね。

475 :デフォルトの名無しさん:2006/12/06(水) 23:40:59
ちなみに、gawkはありましたが
$ gawk -F. "{print jsubstr($0,0,jlength($0)-jlength($NF)-1)}" test1.00.sh
gawk: cmd. line:1: (FILENAME=test1.00.sh FNR=1) fatal: function `jsubstr' not defined
でした。

476 :デフォルトの名無しさん:2006/12/07(木) 00:01:50
>>475
jgawkのjはJapanese(日本語)のj、
jlengthやjsubstrのjも同じ。
データーに日本語が入ってないならjは除けていいよ。


477 :デフォルトの名無しさん:2006/12/07(木) 00:27:39
>>467
Solaris のawkみたいに腐ったやつだとわからないけど、gawkなら
NF--; print $0
で取れないか?


478 :デフォルトの名無しさん:2006/12/07(木) 00:33:01
>>477
jgawkでやったら
aaa.bbb.ccc.dddが
aaa bbb cccになった。

479 :デフォルトの名無しさん:2006/12/08(金) 01:05:00
NFってなに?
Systemコマンドの使い方教えて

480 :477:2006/12/08(金) 01:21:03
>>478
スマソ。OFSを設定してクレイ。
gawk -F'[.]' -v OFS='.' '{NF--; print}
あたりでよろしこ。



481 :デフォルトの名無しさん:2006/12/13(水) 21:04:58
shellってすごいね

482 :デフォルトの名無しさん:2006/12/22(金) 23:27:33
#!/bin/sh
dump -0f /path/to/hda1.dump /dev/hda1
dump -0f /path/to/hda2.dump /dev/hda2

このスクリプトを実行して、hda1の実行途中でCtrl+Cを押したら
hda1は終了するけど次行のhda2のバックアップが開始されます。
スクリプト自体を終了するにはどうしますか?

483 :デフォルトの名無しさん:2006/12/24(日) 10:47:11
>>482
dump は使ったことないので、勘ですが
dump -0f /path/to/hda1.dump /dev/hda1
if [ $? -ne 0 ]
then
dump -0f /path/to/hda2.dump /dev/hda2
fi
じゃ、だめですか?

484 :デフォルトの名無しさん:2006/12/24(日) 12:55:55
#!/bin/sh -e
dump -0f /path/to/hda1.dump /dev/hda1
dump -0f /path/to/hda2.dump /dev/hda2


485 :デフォルトの名無しさん:2006/12/26(火) 23:54:08
sedで-dオプションを使って、特定の文字列がヒットした時に、
その行を削除したいのですがうまくいきません。
manpageみても使い方がよくわからず、困り果てております。
どうやって使えばいいかご教授お願いします。

486 :デフォルトの名無しさん:2006/12/26(火) 23:58:45
>>485
-dオプション???

単純に行削除だけなら例えば以下のように。
--
sed -e '1,5d' #最初の5行を削除
sed -e '/pattern/d' #patternを含む業を削除

487 :デフォルトの名無しさん:2006/12/27(水) 06:42:35
>>486

使い方思いっきり間違ってました
ありがとうございます
助かりました

488 :デフォルトの名無しさん:2006/12/27(水) 17:11:03
てか、パターンを含む行を削除したいだけなら grep -v でやれば良い。


489 :デフォルトの名無しさん:2006/12/28(木) 01:09:04
きっとgrepでは業(カルマ)を削除できないのだろう。

490 :デフォルトの名無しさん:2006/12/29(金) 16:00:50
sedでレコードのor検索やand検索ってできますか?


491 :デフォルトの名無しさん:2006/12/29(金) 16:12:11
RDBでいうレコードの概念は、区切り文字とのパターンマッチでおおよそシミュレート可能。
その上で、パターン/X/と/Y/のandは/X/{/Y/}で、orは
/X/...
/Y/...
でシミュレート可能。

126 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)