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

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

【sed】シェルスクリプト総合@LINUX Part2【awk】

1 :ミスターバッシュ:2006/08/03(木) 13:10:00 ID:5dVnjkpT
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

前スレ
http://pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。

2 :ミスターバッシュ:2006/08/03(木) 13:12:11 ID:5dVnjkpT
関連スレ
おまいら! sed の使い方教えて下さいm(_ _)m@linux板
http://pc8.2ch.net/test/read.cgi/linux/1067815570/l50
【Shell】どのシェル使ってる?【Script】@LINUX板
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
シェルスクリプト総合 その6
http://pc8.2ch.net/test/read.cgi/unix/1143302182/
sed@UNIX板
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
2ちゃん画像落としまくりスクリプト@UNIX板
http://pc8.2ch.net/test/read.cgi/unix/1003833552/
連番のH画像/動画を一気にダウンロードする2
http://pc8.2ch.net/test/read.cgi/unix/1135533382/

ログを読みたい人はこちら
http://makimo.to/cgi-bin/search/search.cgi?q=%83V%83F%83%8B%83X%83N%83%8A%83v%83g&andor=OR&sf=0&H=&view=table&all=on&shw=

3 :ミスターバッシュ:2006/08/03(木) 13:13:16 ID:5dVnjkpT
参考リンク
bashで始めるシェルスクリプト基礎の基礎 @IT
http://www.atmarkit.co.jp/flinux/rensai/theory08/theory08a.html
シェルスクリプト(Bash)入門 CYBERAM Documents Project
http://cyberam.dip.jp/linux_command/shellscript.html

IBM developerWorks
bash 例解
http://www-6.ibm.com/jp/developerworks/linux/000714/j_bash.html
http://www-6.ibm.com/jp/developerworks/linux/000714/j_bash2.html
http://www-6.ibm.com/jp/developerworks/linux/000714/j_bash3.html
実例でわかるsed
http://www-6.ibm.com/jp/developerworks/linux/010202/j_l-sed1.html
http://www-6.ibm.com/jp/developerworks/linux/010216/j_l-sed2.html
http://www-6.ibm.com/jp/developerworks/linux/010223/j_l-sed3.html
実例でわかるawk
http://www-6.ibm.com/jp/developerworks/linux/010330/j_l-awk1.html
http://www-6.ibm.com/jp/developerworks/linux/010413/j_l-awk2.html
http://www-6.ibm.com/jp/developerworks/linux/010622/j_l-awk3.html
コマンドラインからのグラフィックス操作
http://www-6.ibm.com/jp/developerworks/linux/031031/j_l-graf.html
洗練されたPerl: MP3とPerlで遊ぶ
http://www-6.ibm.com/jp/developerworks/linux/040402/j_l-cpmp32.html
http://www-6.ibm.com/jp/developerworks/linux/040319/j_l-cpmp31.html

4 :login:Penguin:2006/08/03(木) 14:44:47 ID:NQ3T36sk
前スレで

one
two
three

の改行を「,」に置換してつなげたいと質問したものです。
結果として、sedではなく、pasteを使って解決致しました。

$ paste -s -d , file > newfile

sedでやる方法については、結構むずかしそう(Nとか駆使)なので、
時間をかけて勉強していきたいと思います。アドバイスして下さった
方々、ありがとうございました。これからもよろしくお願い致します。

5 :login:Penguin:2006/08/03(木) 17:55:54 ID:TFA/5ZAA
>4
からかって悪いけど、前スレで「tree 」を見たとき笑ってしもうた。

6 :login:Penguin:2006/08/03(木) 21:08:32 ID:NQ3T36sk
>>5
(*・∀・)あわてて、何事もなかったように直しましたとも。

7 :login:Penguin:2006/08/03(木) 21:47:36 ID:tNhCb6YC
>>1

>>4
他のスレで拾った物だけど
sed -ne '1h;1!H;${x;s/\n/,/g;p}' file > newfile

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

8 :login:Penguin:2006/08/03(木) 22:39:28 ID:NQ3T36sk
>>7
ありがとうございます。今、テストしたら完璧でした!
原理はこれから学びます。胸のモヤモヤがとれました。

9 :login:Penguin:2006/08/03(木) 23:27:57 ID:TFA/5ZAA
関係ない話だけど、
「原理」とか「摂理」とかいう比較的重い意味を持つ概念が
怖いものの代名詞というか、近づいてはならぬものに
使われる言葉となってしまったことは悲しいことだ。

なんかbashのスクリプト一発でドカンと世界中の破壊的カルトを消滅させられればいいのに・・・

10 :login:Penguin:2006/08/04(金) 00:24:00 ID:YSnXFLrG
>>9

つ find 世界中 -name カルト -exec rm {}\;

11 :login:Penguin:2006/08/04(金) 00:39:59 ID:eCSPZD0t
どんなに自分(達)だけは違うとか言い張っても
スクリプト書いてる時点で所詮はハッカー夷的カルトだろ。
つか何で又とつぜん???

12 :login:Penguin:2006/08/04(金) 00:48:36 ID:tTQk3to+
>11
んにゃ、単に「原理」→「統一協会(統一=原理)」→
「破壊的カルト」と連想が行ったので、急に
「ビンラディンとか文鮮明とかおかしな連中を一斉に消せないかしら」
と思っただけで深い意味はないわ。
スレ汚し失礼。

13 :login:Penguin:2006/08/04(金) 02:16:12 ID:hXVs7Oof
rm -f /bin/ladin

14 :login:Penguin:2006/08/04(金) 02:20:36 ID:UtLdfbE9
$ gen-riken > /dev/null

15 :login:Penguin:2006/08/04(金) 07:15:35 ID:tTQk3to+
ははは。皆さんノリが良いですねえ。

16 :login:Penguin:2006/08/04(金) 21:29:56 ID:YSnXFLrG
質問です。

カレントに apple orange pine etc というディレクトリがあり、これに
次々とログインして(出来ればetc以外)、

$ myprog

と実行したいのですが、どこから手をつけて良いのやらまったくわかりません。
わかる方、ヒントだけでも結構ですので、ご教授頂けませんでしょうか?

17 :login:Penguin:2006/08/04(金) 22:03:09 ID:YSnXFLrG
微妙に自己解決

ls -1 | sed '/^etc/d' | xargs myprog

で出来たくさいけど、美しくないです。
出来れば、これを

$ myprog

一発でやれたらなと思ってます。

18 :login:Penguin:2006/08/04(金) 22:04:26 ID:YSnXFLrG
たびたびすいません。訂正です。

>>16
誤 次々とログインして
正 次々と移動して

でした。すいません。

19 :login:Penguin:2006/08/04(金) 22:38:41 ID:dXMK20nx
>>16

for workingdir in apple orange pine etc # 「etc」がいらなきゃ削れ
do
    cd $workingdir
    myprog
    cd ..
done

ま、cd .. という流儀が気に入らないという奴がこのスレにはいるかも。
そういう奴は適当にレスつけろや。

20 :login:Penguin:2006/08/04(金) 22:41:39 ID:wY0VtmKQ
sedじゃないからレス付けないわよ

21 :login:Penguin:2006/08/04(金) 22:53:54 ID:dXMK20nx
sedのスレじゃないんじゃない?スレタイの【sed】はpart1の継承と思われ。

22 :login:Penguin:2006/08/04(金) 23:03:25 ID:VDkmAFM5
>>19
>17はlsしてるから、こういうことのような気がする。
for workingdir in !(etc) # bashのみ

myprog一発の意味は良くわからないままだが。

23 :login:Penguin:2006/08/05(土) 09:14:42 ID:O9k+WVF/
ふつーfindじゃね?
ttp://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html
-path pattern参照


24 :login:Penguin:2006/08/05(土) 14:47:48 ID:9HX9xiOs
{}\ の意味を教えてください!
GoogleやYahooで出ないよ!!!!なんでー

25 :login:Penguin:2006/08/05(土) 14:48:38 ID:J3gOyxfQ
>>24
引数は特にない。区切り記号

26 :login:Penguin:2006/08/05(土) 15:21:31 ID:4ssKXxYM
>>24

正確にいうと、

{}\ でなく、{} \

スペース空けないとエラーになります。

27 :login:Penguin:2006/08/05(土) 15:23:21 ID:J3gOyxfQ
>>26
正確に言うと{}\;ではないか

28 :login:Penguin:2006/08/05(土) 17:30:27 ID:XjGTvucN
>>24
話が見えないんだが…
find の引数ってことで良いの?


29 :login:Penguin:2006/08/06(日) 01:16:46 ID:Myj22fA7
まずman読もうよ....

>引き数は、 `;' を含む引き数にいたるまで、すべて command の引き数と
>みなされる。文字列 `{}' は現在処理しているファイル名に置き換えられる。

30 :login:Penguin:2006/08/07(月) 19:15:39 ID:C6inuQl7
>>19 >>22

亀レスですいません。アドバイスありがとうございます。
諸事情でネットに繋ぐことが出来ませんでした。

具体的にやりたいことを説明しますと、/var/spool/ml の下に100個程のディレク
トリがあります。etc他、数ディレクトリは無視して、任意のディレクトリ配下の
activeファイルからコメント行(#)を削除。その後、$ cp members actives を実行、
という感じです。
どういう用途かと言いますと、メーリングリストのユーザ設定ファイルのゴミ行を
整理する目的です。で、現在、次の様なmyprogというスクリプトを書き

#/bin/sh
PROGRAM=`basename $0`
HOME=/var/spool/ml/
for x in "$@"
do
if [ -d $x ]; then
if [ -f $x/actives ]; then
cd $x
sed '/^#/d' actives | sort | uniq > members;
cp members actives;
echo "done... $x"
else
echo "actives not found... $x"
fi
cd $HOME
else
echo "not direcotory... $x"
fi
done

31 :login:Penguin:2006/08/07(月) 19:16:14 ID:C6inuQl7
下記コマンドでやりたいことは出来るのですが
$ ls -1 | sed -e '/^bin/d' -e '/^etc/d' -e '/^@/d' -e '/^doc/d' | xargs myprog
出来れば、ls -1 の結果を配列(あるのかな?)に入れて、myprog内で実行したいと
思っています。また、こうすればもっと美しくなるというアドバイスもあれば、とても
うれしく思います。

32 :login:Penguin:2006/08/07(月) 19:30:10 ID:C6inuQl7
少し短くなりました。後は、ls -1 の結果を forに渡せれば完璧
なんですが(´・ω・`)

#/bin/sh
PROGRAM=`basename $0`
HOME=/var/spool/ml/t/

for x in "$@"
do
if [ -f $x/actives ]; then
sed '/^#/d' $x/actives | sort | uniq > $x/members;
cp $x/members $x/actives;
echo "done... $x"
else
echo "actives not found... $x"
fi
done



33 :login:Penguin:2006/08/07(月) 20:48:45 ID:gs8/6rb4
やりたいことできてるならそれでいいじゃん。
きれいに書きたいとか配列使いたいとかなら
もっとまともなスクリプト言語使った方がいいよ。
そういうのをシェルに求めちゃいかん。

34 :login:Penguin:2006/08/07(月) 22:46:57 ID:w0ywXoJn
やきもそ?

35 :login:Penguin:2006/08/07(月) 23:23:40 ID:h+JkAwh7
TOPDIR=/var/spool/ml/t/

cd "${TOPDIR}"
for x in *
do
case "$x" in
bin|etc|doc|@*)
continue
;;
esac

${PROGRAM}はいらないのでは?
${HOME}を書き換えるのも気持ち悪いかと


36 :login:Penguin:2006/08/08(火) 09:51:22 ID:xwC3gQjv
for x in `find hoge`でまわして
除外対象は${x%hoge}でチェックとかはよくやる。

あと、ここの前擦れにwhile+readの例があったと思う。
お、まんまの例があった。
ttp://x68000.q-e-d.net/~68user/unix/pickup?%A5%B7%A5%A7%A5%EB%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8


37 :login:Penguin:2006/08/10(木) 01:17:08 ID:hLDol0PX
>>33-36
アドバイスありがとうございます。
勉強になります。

>>35
PROGRAMは慣習でつけてます。拡張していった時に
echo "usage: $PROGRAM filename"
とかって使ったりするので。たしかにHOMEは気持ち悪いですね。直しました!

>>36
for x in `find hoge`
これは使えるかも!ありがとうございます!コマンド結果をxに渡せるとは
知りませんでした。

38 :login:Penguin:2006/08/11(金) 00:24:55 ID:dPYSw/pT
>>37
$0

39 :login:Penguin:2006/08/11(金) 19:52:52 ID:c1dCdFjO
Cutlist: 0-2731,19014-21714,37651-41262,64752-68382,80903-84503,95557-98910,
という出力を
0 2731 0
19014 21714 0
37651 41262 0
64752 68382 0
80903 84503 0
95557 98910 0
このように整形することはできました。(最後の0は定数)
さらにこの個々の値を全て29.97で割って倍精度出力したいのですが
シェルスクリプトでそこまで出来るでしょうか?
できるという方、その方法を教えてください。お願いします。

今のところのコマンド
mythcommflag --getcutlist -f /mpeg/rec/1007_20060609005300.mpg | grep Cutlist | sed -e 's/Cutlist: //' -e 's/-/\t/g' -e 's/,/\t0\n/g' | sed -e '$,$d'

40 :login:Penguin:2006/08/11(金) 20:41:43 ID:byhCsImE
>>39
最終結果(倍精度出力)はawkあたりを使うと良いと思われ。

41 :login:Penguin:2006/08/11(金) 22:17:16 ID:AQmE1c/e
>>40
#!/usr/bin/gawk -f
/^Cutlist/ {
sub(/^Cutlist: */, "", $0);
sub(/,$/, "", $0);
n = split($0, a, ",");
for(i = 1; i <= n; i ++){
split(a[i], j, "-");
printf("%f %f 0\n", j[1] / 29.97, j[2] / 29.97);
}
}

42 :39:2006/08/11(金) 22:27:22 ID:c1dCdFjO
>>40-41
ありがとうございます。神です。
今から自分で一行ずつ理解していくつもりです。
# ちょっと複雑な物はawkのがいいのかな

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

43 :login:Penguin:2006/08/12(土) 02:02:48 ID:F5xv4HYx
基本的な質問ですが、このスレって、sed、awk限定ですか?
それとも、「シェルスクリプト総合」とある様に、他の質問などしても大丈夫
なんでしょうか?

44 :login:Penguin:2006/08/12(土) 02:22:13 ID:0D4xQrt3
【】はアホが付けたゴミなので無視すべし。

45 :login:Penguin:2006/08/12(土) 15:55:03 ID:qqxmgQZ0
>39
bcの有無次第という経験がある。
perlの方がawkの実装違いに悩むよりはいい鴨試練。

>43
expectあたりもおk

46 :login:Penguin:2006/08/12(土) 17:23:29 ID:rfgDoil3
wish もシェルの内?


47 :login:Penguin:2006/08/12(土) 17:49:22 ID:0P6HlNMI
仮にそうだとしても、このスレに書いても反応ないと思う。

48 :login:Penguin:2006/08/13(日) 00:22:41 ID:/XLxPgJE
大げさでも遠慮する必要もない、どんどん使え。
どうせperlは必須科目、読み書きできてあたりまえ。
pythonも必須科目になりつつある。
ruby、どうかな。
bashのスクリプトをpythonで書き直すとかはいい訓練になるよ。
古代象形文字を英語に翻訳する感じ。

49 :login:Penguin:2006/08/13(日) 00:33:57 ID:CGwN7DaL
>>48
そうですか。んでは次の方どうぞ。

50 :login:Penguin:2006/08/17(木) 14:26:19 ID:NdJCZwC6
正規表現について質問です。

dir
dir1
dir10
dir.tar
file.php

とあり、dir、dir1、dir10という風にdir[数字0桁〜2桁]へマッチさせたい
のですが、

"^dir[0-9][^\.]"

だと、dir自体にマッチしてくれません。どう書けばいいんでしょうか?
昨日からやってます。アドバイスお願い致します。
ちなみに、PHPのereg()です。

51 :login:Penguin:2006/08/17(木) 14:29:36 ID:1Ek0hIni
>>50
PHP part2
http://pc8.2ch.net/test/read.cgi/tech/1127806509/

52 :login:Penguin:2006/08/17(木) 20:06:26 ID:nAJZh721
>>50
grep -e "^dir[0-9]*$"

53 :login:Penguin:2006/08/18(金) 00:36:00 ID:Dr7kWMUz
>>52
dir111

ハイアウト。


54 :login:Penguin:2006/08/18(金) 00:44:07 ID:RiO8CgXj


55 :login:Penguin:2006/08/18(金) 00:54:13 ID:OVN7tn41
数字は2桁までだそうですよ、センセ

56 :login:Penguin:2006/08/18(金) 00:55:07 ID:RiO8CgXj
なるほど。

>>52は俺じゃないけど

grep -e "^dir[0-9]$" -e "^dir[0-9][0-9]$"

これでいいんか?

57 :login:Penguin:2006/08/18(金) 01:01:10 ID:FNYS+oEf
grep じゃなくて PHP だそうですよ、センセ。

58 :login:Penguin:2006/08/18(金) 01:02:06 ID:K8QeIm2Y
だったらお前が書いてやれ、センセ

59 :login:Penguin:2006/08/18(金) 10:11:45 ID:uU/Ps5z+
(^dir$|^dir\d{1,2}$)


60 :login:Penguin:2006/08/18(金) 10:37:01 ID:FNYS+oEf
http://pc8.2ch.net/test/read.cgi/tech/1127806509/419
で解決してるみたいよ。

61 :login:Penguin:2006/08/18(金) 12:19:14 ID:uU/Ps5z+
dir\D+ともマッチしそうだけど、まいーか

62 :login:Penguin:2006/08/18(金) 12:23:17 ID:uU/Ps5z+
あ、大丈夫だな

63 :login:Penguin:2006/08/19(土) 17:46:13 ID:CKH2sw8O
テキストファイルの中から、 "\b[a-zA-Z]{10}\b" にヒットする単語
(スペース+アルファベット10文字+スペース)を抽出して一覧で出
したいんですが、手も足も出ません。

awkかsedで実現する方法を教えていただけませんでしょうか。

64 :login:Penguin:2006/08/19(土) 21:11:45 ID:lL38en3G
>>63
(step 1)1行複数単語→1行1単語の形式にまず直す。
これは\bを改行にtrすることでほぼ実現できる(余計な空行とか多少入るけど)。
(step 2)grep '^[a-zA-Z]{10}$' のようなことをする。
(grepの実装によっては{}をサポートしてたりしてなかったりするだろう)

65 :63:2006/08/19(土) 21:41:31 ID:CKH2sw8O
>>64
貴殿、頭いいな。方向性は見えた。Thanks。


66 :login:Penguin:2006/08/20(日) 12:36:50 ID:8BT2kJaV
きのうやっとsedとかawkの勉強を始めたOSX使いの俺はお断りですかそうですか。
断られないようにきっちり勉強してくると汁。

でもさあ、
いまいち練習のいいネタが見つからないんだよなあ。
みなさま正規表現の練習とかするときのネタは、どこから仕込んでるんですか?

67 :login:Penguin:2006/08/20(日) 12:45:30 ID:HHyoi7jx
>>66
htmlでも解析してみたらどうだい?

68 :login:Penguin:2006/08/20(日) 15:37:07 ID:6ucGe45P
>>66
俺は初めはviの置換で練習した。sedと同じ表記が可能。
awkは言語としてとらえたほうがいいかも。


69 :66:2006/08/20(日) 15:46:43 ID:8BT2kJaV
>>66
BlogのHTMLの解析をして、それをRSSにでっち上げるとか面白そうだからやってみようと思いますた。

さっきからdatを解析してました。HTMLに吐き出すもの。
この1行で処理するというのには正直感動。

$ cat dat1.dat | awk -F"<>" '{print "<h1>" $3 "</h1><p>" $4 "</p>"}' | sed -e 's/\(http:\/\/.*\/l50\)/<a href=\"\1\">\1<\a>/g' > test.html

こんな具合だけれど…。文章中にリンクがあったときに、自動でタグをくっつけるやり方がいまいちぱっとしない。

sed -e 's/\(http:\/\/[^/]*\)/<a href=\"\1\">\1<\a>/g'
ホストのトップディレクトリにリンクがはれる('A`)。

いわゆる | をつけて処理しようとすると、うちのsedは何も吐き出さないんだけれど、これはバージョンが古いってことかな。

70 :login:Penguin:2006/08/20(日) 16:58:41 ID:jjYenmqQ
1行で実現するより、複数行になってもawkオンリーあるいはsedオンリーで実現した方が美しいだろ。


71 :login:Penguin:2006/08/20(日) 17:00:11 ID:HHyoi7jx
>>70
TPO

72 :login:Penguin:2006/08/20(日) 20:07:25 ID:9C4Qkftc
xmlawkつかうといいよ。

73 :login:Penguin:2006/08/20(日) 23:30:08 ID:OEoaYPnv
それで練習になるのか?

74 :login:Penguin:2006/08/21(月) 02:12:20 ID:Wd9CmAkD
>>69
いわゆる | って正規表現の選択のやつ?
だとしたら、BREには選択はないのでそもそも使えない。

ただし、GNU sed だと \| という表記で使える。


75 :login:Penguin:2006/08/22(火) 21:07:59 ID:+v8xeAHC
初歩的な質問で恐縮です。

user1:AAAAAAAA
user2:BBBBBBBB
user3:CCCCCCCC

という中身のファイルがあったとします。で、user3の行があれば、第2カラムを
DDDDDDDDに変更。無ければ、user3:DDDDDDDDの行を追加したいのですが、何の
コマンドを使えばよろしいんでしょうか?希望としては、コマンド一発で出来る
方法を探っています。※Perlなどでスクリプトを組まない

お知恵をお借り出来ればと思います。宜しくお願い致します。


76 :login:Penguin:2006/08/22(火) 21:11:51 ID:iaWm4QvQ
>>75
(grep -v '^user3:' srcfile ; echo user3:DDDDDD) > tmpfile ; mv tmpfile srcfile

77 :login:Penguin:2006/08/22(火) 21:29:52 ID:+v8xeAHC
>>76

ありがとうございます。
でも、これだと、user1,user2が上書きされて消えてしまいます(T.T)

78 :login:Penguin:2006/08/22(火) 21:33:49 ID:iaWm4QvQ
ぇー

79 :login:Penguin:2006/08/22(火) 21:39:31 ID:+v8xeAHC
なんか例がわかりずらかったですね。
もっと細かく説明します。

adminファイル
admin:AAAAAAAA
power:CCCCCCCC

userファイル
user:DDDDDDDD

とあり、userファイルに、adminファイルの内容を追加したいのです。
追加だけなら

$ cat admin >> user

で済むのですが、既に追加済みの場合は、新しく、adminとpowerの行を
上書きしたいのです。わかりずらくてすみません。

80 :login:Penguin:2006/08/22(火) 21:46:24 ID:iaWm4QvQ
細かくも何もぜんぜん要求仕様ちがうやん。
いつのまにかファイル2個あるし。

81 :login:Penguin:2006/08/22(火) 22:10:49 ID:NABXSFVh
joinつうコマンドでできるような気がするが、オプション覚えるのがめんどくさいから、
俺はその手の処理にはawkを使うようにしている。


82 :login:Penguin:2006/08/22(火) 22:10:59 ID:+v8xeAHC
すいません。m(__)m
説明不足でごめんなさい。

83 :login:Penguin:2006/08/22(火) 22:36:43 ID:iaWm4QvQ
join 微妙だなぁ。cat してワンライナー組んじゃった方が早い感じ。

84 :login:Penguin:2006/08/22(火) 22:37:55 ID:qaN2f1N0
>>75を無理矢理一行で書いてみた。sed -iを使ったので反則気味。

#!/bin/sh

grep -q -c "user3:" userfile \
&& sed -i 's/^user3:.*$/user3:DDDDDDDD/' userfile \
|| echo "user3:DDDDDDDD" >> userfile

85 :login:Penguin:2006/08/22(火) 23:46:45 ID:90hvAnWP
Linuxをインストールする時のパッケージや設定とかをシェルスクリプトにまとめたことある人いますか?
シェルスクリプトはやったことがないので、こんな感じでまとめていいものか、
途方にくれています。


「スクリプト前」
# cd /etc
# mv -i logrotate.conf logrotate.conf.org
# cp -i -p logrotate.conf.org logrotate.conf
# vi logrotate.conf
# ci -u -zLT logrotate.conf



「スクリプト後」
if [ cd /etc];
then
mv -i logrotate.conf logrotate.conf.org &&
cp -i -p logrotate.conf.org logrotate.conf &&
cp -p /home/SHELL/logrotate.conf logrotate.conf &&
ci -u -zLT logrotate.conf
else
echo"logrotate Error!!!"
fi

86 :login:Penguin:2006/08/23(水) 02:58:44 ID:LeEwpLMn
>85
行動の成否で判定したいだけなら[]は余計。

87 :login:Penguin:2006/08/23(水) 05:01:38 ID:B3/HAlAd
引数に特定の文字列があるかどうか grep で確かめたい場合、
どういう書き方が一番いいでしょうか?
今は

if echo "$1" | grep 'h[ao]ge' > /dev/null ;then

こんな感じでやってるんですけど、
echo と /dev/null へのリダイレクトが冗長に思えるので、
もっと簡潔なやり方があれば教えてください。

88 :login:Penguin:2006/08/23(水) 06:01:06 ID:uCowIUgO
>>87
case $1 in h[ao]ge) echo found ;; *) echo notfound ; esac
正規表現じゃなくてパス名展開なので注意

89 :login:Penguin:2006/08/23(水) 19:14:08 ID:XWE7YPDO
>>87
grep -q

90 :login:Penguin:2006/08/23(水) 21:54:25 ID:m8SvDdPt
>>89
grep -s な環境もあるので、>/dev/null の方がポータブル。

91 :login:Penguin:2006/08/29(火) 10:44:29 ID:LacrCZoW
>>86の補足。

シェルスクリプトの文法では、if文は、
if コマンド; ...
なので、if cd ...; と書くという意味ね。

[ はif文の括弧じゃなくてtestコマンドへのリンク。
if [ ... ]; then は if test ...; then と等価。
test ではなく [ という名前で実行した場合は最後に ] という引数が
ないとエラーになるという作りになっている。

92 :login:Penguin:2006/08/30(水) 08:56:40 ID:ptUsDypX
あぁ、]は引数なのか。どうりでスペースが。。。
勉強になった。ありがと。>>85じゃないけど

93 :login:Penguin:2006/09/01(金) 20:00:08 ID:lCcTQKLy
bashで、ファイルAとファイルBの
タイムスタンプの同一性が確認したいのですが、
どーやればいいのでしょうか。
内容の同一性ではなく、あくまでタイムスタンプの同一性です。

Cでかけば、多分こんな感じ。
struct stat stat1=fstat(file1);
struct stat stat2=fstat(file2);
if( stat1.mtime==stat2.mtime){....}

bash ではどうするのでしょうか?


94 :login:Penguin:2006/09/01(金) 20:08:17 ID:5aC2i0M0
test ! tstest1 -nt tstest2 -a ! tstest1 -ot tstest2 && echo hoge

95 :login:Penguin:2006/09/01(金) 20:46:18 ID:9V2XQm3y
>>93
statを使えば可能かと

96 :login:Penguin:2006/09/03(日) 02:05:43 ID:F8zNeDUy
ディレクトリを755
ファイルを644で一括して変換したいんですが、

$ chmod -R 755 dir

だと、ファイルも755になってしまします。何か良い方法かコマンドがあったら
教えて下さい。chmodのman見たけど、ないっぽいのでこちらで質問します。

97 :login:Penguin:2006/09/03(日) 02:10:10 ID:Ke5Muy7n
find -type

98 :login:Penguin:2006/09/03(日) 11:45:21 ID:bshh0ysH
>>96
find tmp \( -type d -exec chmod 0755 {} \; \) -o \( -type f -exec chmod 0644 {} \; \)


99 :login:Penguin:2006/09/03(日) 11:47:59 ID:O81fbTM3
findってキモいなぁ

100 :login:Penguin:2006/09/03(日) 11:54:50 ID:Kb773J88
chmod -R a+r,u+w

101 :96:2006/09/03(日) 12:49:17 ID:F8zNeDUy
>>97-100
アドバイスありがとうございます!解決しそうです。

102 :login:Penguin:2006/09/03(日) 13:12:10 ID:K075yEZw
zshでしあわせになろうと、
chmod 755 **/*(/)
chmod 644 **/*(.)
を試みたらディレクトリが深すぎて怒られることもある。

一発でやらないなら
find -type d -print0 | xargs -0 chmod 755
find -type f -print0 | xargs -0 chmod 644
が一番汎用性が高くてすっきりしているか。
Darwinの非GNU find/xargsにも-print0や-0あるようだし。

103 :login:Penguin:2006/09/03(日) 13:12:44 ID:K075yEZw
find . 以下略にすべきでした。

104 :login:Penguin:2006/09/03(日) 13:45:39 ID:K075yEZw
そういえばここLinux板だった。GNU find/xargs前提でいいんだな、きっと。

105 :login:Penguin:2006/09/04(月) 15:50:53 ID:N5MHYTmG
mkdir でディレクトリを作成してそのディレクトリに移動するスクリプトを書きたいと思っています。
#!/bin/sh
mkdir $1 && cd $1
だと、子プロセスが移動するだけで親がcdしてくれません。いい方法はないでしょうか。

106 :login:Penguin:2006/09/04(月) 15:57:14 ID:dcVwde1w
いまいち、意味がよくわからんけど、
呼び出すときに、
$ . /hoge.sh
とするということか?


107 :login:Penguin:2006/09/04(月) 16:36:14 ID:N5MHYTmG
>>106
意味が分かりにくくてスミマセン。
パスが通ったところに例えばmkdircdという名前で置いておいて
$ mkdircd $(date +%Y%d%m)-1
とすると、$(date +%Y%d%m)-1というディレクトリを作成して
そこにcdするという意味です。言い換えると、
$ mkdir $(date +%Y%d%m)-1
$ cd $(date +%Y%d%m)-1
を一度にするという意味です。mkdirのワラッパーを作成してalisasで置き換え、
例えば--cdというオプションがあれば、mkdirした後にそこへcdするというもの
でも構いません。
# 単に打鍵数を減らして横着したいだけなのですが。。



108 :login:Penguin:2006/09/04(月) 16:38:38 ID:Xg7jkciV
ふふふ

109 :login:Penguin:2006/09/04(月) 16:38:41 ID:vaQkza9Z
「ワラッパー」ってのが何だかわからんけど、
関数じゃだめなん?

110 :105:2006/09/04(月) 16:52:20 ID:N5MHYTmG
>>109
ありがとうございます。解決しました。
mkdircd () { /bin/mkdir $1 && cd $1; }


111 :login:Penguin:2006/09/04(月) 19:50:25 ID:Zd0ujhiz
>>102
find -type d -exec chmod 755 {} \;
find -type f -exec chmod 644 {} \;


112 :login:Penguin:2006/09/04(月) 22:34:21 ID:sHXG9gFj
wrap = ラップ (サランラップとかラッピングとか)

113 :105:2006/09/04(月) 23:17:00 ID:N5MHYTmG
>>112
ありがと。ラッパーでつね。

114 :login:Penguin:2006/09/04(月) 23:31:18 ID:GlEy5cG5
chmod -R 644 /

115 :login:Penguin:2006/09/05(火) 10:08:07 ID:5E+/nWTh
シェルスクリプトの中で変数中の "`" を "\`" に escape したいんですができません

#!/bin/sh
S='a`b'
S2=`echo "${S}" | sed 's/\`/\\\`/g'`
echo "${S2}"

a`b

外部に sed script をおけばできるんですが
shell script の中だけではむりでしょうか

116 :login:Penguin:2006/09/05(火) 10:36:35 ID:CtztP3Q6
そらそだ

117 :login:Penguin:2006/09/05(火) 10:53:09 ID:4GXGTKmU
S2=`echo "$S" | sed 's/\`/\\\\\`/g'`


118 :115:2006/09/05(火) 22:33:00 ID:pCLRKlZc
>>117
なるほど、できました
しっかし、これは難しかった
#!/bin/sh が `----` を解釈するとき
sed 's/\`/\\\\\`/g' が sed 's/`/\\`/' になって、
sub shell が '----' を解釈して
sed に $1==s/`/\`/ を渡すということですか!!



119 :login:Penguin:2006/09/05(火) 22:54:42 ID:dRnTZ/L0
>>118
なんかああー!もうだめー!ブリブリぶりー!!って言うコピペに見えた。

120 :login:Penguin:2006/09/05(火) 23:33:33 ID:w48ryD58
>>119
眼科池


121 :login:Penguin:2006/09/06(水) 01:03:44 ID:k0MtvRe2
>>119
脳外科池。
2chの見過ぎには注意しよう。

122 :login:Penguin:2006/09/07(木) 17:27:40 ID:iCRx2SWb
dir以下を再帰的に掘っていって、全てのファイル(.txt)の中の文字列

SAM001P (SAM+三桁数字+英1桁〜2桁)

のSAMを削除をしたいんですけど、どんな感じでスクリプトを作れば良いか
アドバイス頂けますでしょうか?

めんどくさいことに、SAM001P/SAM002PX/SAM003B ってのもあれば、

これについてはSAM004NNを参照。

と言う風に文に埋まってしまってるものもあります。なんとかshとsedとawkで
やり遂げたいと思ってます。

123 :login:Penguin:2006/09/07(木) 17:34:35 ID:q58mDIRA
>>122
find と sed -i で行けそうじゃない?

124 :login:Penguin:2006/09/07(木) 18:59:32 ID:iCRx2SWb
>>123
いけそうな気がして来ました!
がんばってみます(*・∀・)=3

125 :login:Penguin:2006/09/14(木) 01:29:15 ID:p/dn3po+
例えば P1-5 P3-12 P2-9 を P1-05 P3-12 P2-09 というようにマイナスのあとを2桁にしたい
のですが、
echo P1-5 P3-12 P2-9 | sed -e 's/P\([123]\)-\([0-9]\{1\}\)/P\1-0\2/g'
P1-05 P3-012 P2-09
うまくいきません。この場合はどのように正規表現を書いたらよいのでしょうか。

126 :125:2006/09/14(木) 01:40:51 ID:p/dn3po+
自己解決しました
cho P1-5 P3-12 P2-9 | sed -e 's/P\([123]\)-\([0-9]\)\([^0-9]\|$\)/P\1-0\2\3/g'
P1-05 P3-12 P2-09


127 :login:Penguin:2006/09/14(木) 23:49:34 ID:rr8HdM9N
ちょw

128 :login:Penguin:2006/09/22(金) 16:32:09 ID:Gi/VKmOp
簡単にお金稼ぎ!!!

以下の手順でやれば、無料でお金稼ぎができます。
企業も広告の宣伝になるから、お金をくれるわけです。
最初の1日目で 2000 円〜3000 円 は確実に稼げます。
実際の作業は数十分程度、1時間はかかりません。

@ http://www.gendama.jp/invitation.php?frid=470908
    ↑このアドレスからサイトに行く。
Aそこのサイトで無料会員登録(応募)します。
 (その時点で 500 ポイントが貰えます。)
 ※事前に新規でヤフーなどのフリーメールアドレス
 を取っておくといいですね。
Bポイントを稼ぎます。
 懸賞の応募や無料会員登録などをする事によって
 1日目で約 20000 ポイントは GET できます。
C 3000 ポイントから、現金や WEB マネーに交換できます。
Dトップの右上に「交換」という所がありますので、
 そこから交換をしましょう。
 その月に初めてポイントバンクにポイントを移行した時、
 さらに別途として 1000 ポイント貰えます。

これで現金や WEB マネーを稼ぐといいですよ!!!

129 :login:Penguin:2006/09/25(月) 14:04:16 ID:ENWvwHb8
シェルはbashで、
MySQLのデータを元に自動でユーザを作るシェルを
作りたいのですが、参考になりそうなサイトを教えて
下さい。
ぐぐったけどそういう参考になるサイトが出てこないです。

130 :login:Penguin:2006/09/25(月) 15:53:36 ID:3M5G2Z3K
>>129
>>3

131 :login:Penguin:2006/09/25(月) 20:01:16 ID:8zKTMoIu
常套手段だったらすまん。
#!/bin/busybox ash
とかやると結構早くなるかな?

それとも各種コマンドの表現力のなさに絶望するかな。


132 :login:Penguin:2006/09/25(月) 23:30:01 ID:bEafUneY
へぇー(x3)、busybox ashでシェルスクリプト実行させると
該当する外部コマンド呼び出しはシェルコマンド的呼び出しになるんだ。
$?とか使えるからてっきりバイナリ実体の共通化だけが目的で、
コマンド実行自体は普通にfork&execしてるのかと思ってた。

それはともかく、インストーラだとかでは結果的にそれやってる訳だから、
それなりに使えるんじゃない?逆にGNU拡張とかに依存しない移植性の
高いシェルスクリプトを書けるようになるかも。

速度は・・・速くなるだろうけど、シェルスクリプトで気にするかというか。


133 :129:2006/09/26(火) 10:54:20 ID:/kN9yJk7
シェルでMySQLの起動までは出来るんですけど、その続きを自動で処理してくれません。
(MySQLにログインした後、入力待ち状態になってしまって、起動後にDBを変更してくれない)。

mysql -u mofu -pmofumofu
use mohe
select * from moeneko;

としたところログイン後の処理をしてくれずにMySQLを終わらせた時点でuseって何だゴルァと
怒られます(以降の処理も怒られます)。


134 :login:Penguin:2006/09/26(火) 11:19:28 ID:df8bksAP
>>133
echo 'use mohe; use select * from moeneko;' | mysql -u mofu -pmofumofu

135 :129:2006/09/26(火) 15:05:32 ID:/kN9yJk7
>>134
そんなスマートな方法が・・・。

mysql -u mofu -pmofumofu mohe <mofu.sql

[mofu.sql]
use mohe
select * from moeneko;

って2つのファイルにしてやってた。
問題はこのクエリを発行後、戻ってきた奴を変数に入れる方法だね。

//MySQLのレストア作業で読み込ませるファイルがCreate文とか普通に
手打ちで出来ることをテキストに纏めて順次実行してるだけなんだから、
select文とかも実行できるんじゃね?と思って試してみました。

136 :login:Penguin:2006/09/28(木) 23:39:58 ID:qmT4SbpH
シェル(使ってるのは主にbash)って、ちょっと複雑な処理をさせると、
すぐに動作が重くなるね(多重にループさせたときとか)。
同じ処理でも、Cの方が圧倒的に早い。
最適化しないのがおおきいのかな?

137 :login:Penguin:2006/09/28(木) 23:46:14 ID:kP+fnhcw
シェルは真のインタプリタ
Tcl、Perlなどはランタイムコンパイル


138 :login:Penguin:2006/09/29(金) 00:09:45 ID:ikhtZqAF
>>137
どっからperlがでてきてんだ?

139 :login:Penguin:2006/09/29(金) 00:17:43 ID:qV/OGN3K
>>136
具体的にどういう処理?

そもそもCで書かれたbash上の実行内容をCで書いたら負けるわけないだろ。
書く時間がかかるからフツーshellでやるけど。

140 :login:Penguin:2006/09/29(金) 00:19:49 ID:ikhtZqAF
>>139
>そもそもCで書かれたbash上の実行内容をCで書いたら負けるわけないだろ。

そうか?Cでアセンブラを書くことも出来るわけでな。

141 :login:Penguin:2006/09/29(金) 02:33:29 ID:AlG8EKxr
shellscriptだってバイトコードべた書きできるよ

142 :login:Penguin:2006/10/01(日) 14:53:16 ID:me3R4vLB

原点に戻ろう。ケースバイケースで使い分ければ済む事。

用途に合ってれば、バイナリをゲロする言語で結構。

そこまですることない、ってーならシェルスクリプトでいいジャマイカ



143 :login:Penguin:2006/10/01(日) 19:06:18 ID:Xo+fTZgf
>>139
遅レスだが、あるファイル内のすべてのの10進を16進に変換する処理。
(bashって、16進形式ないよね?)
アルゴリズムは16の何乗かで割っていくというよくある方法。
変換する文字が10個以上くらいになると、途端に遅くなる。

144 :login:Penguin:2006/10/01(日) 19:18:04 ID:7VdKxRNj
>>143
それシェルでやるか?
普通はbcやら計算用の他のプログラムを呼ぶと思うんだが。

そもそもシェルスクリプトは、単機能なプログラム群(test,expr,sed,awk,etc.)
のグルーとして機能して、複雑な機能の9割を短期間で構成できる所が強みだろ。
プログラミング言語としてのシェル自体の能力を語ってみてもなあ。

145 :144:2006/10/01(日) 19:21:28 ID:7VdKxRNj
16進変換自体は、bcでobase指定してもいいけど、今の時代ならprintfの方が簡単か。

146 :login:Penguin:2006/10/02(月) 14:46:13 ID:D0XdThx6
>>143みたいなジョークはおいといてw
必要ならperlやcで書いてそれをbashから使えばいいだけの事。
bashもいっぱしの言語なので他の言語で書けるアルゴリズムならbashでも書けるが
効率的にナンセンスなモノは書く前に気づけよ。
ちょいとbashで済ませる程度の事をcで書くのも効率的にナンセンス。

147 :login:Penguin:2006/10/03(火) 05:16:19 ID:FpR8NZbm
今のCPUの性能なら、基数変換程度の計算ならシェルで動かしても
そんなに時間かからないと思ったんだけど、そうでもないのね。

148 :login:Penguin:2006/10/03(火) 07:31:25 ID:EZmi0NrE
敢えてbashismを犯してまでヤル作業でもないなぁ。と言う印象。

149 :login:Penguin:2006/10/03(火) 10:52:43 ID:/JDV4iux
>>148
適材適所なので自分ではやらないいけど、
無茶する香具師がshellを改良するとか、
別のソフト作ることを期待して止めはしない。

150 :login:Penguin:2006/10/03(火) 11:41:14 ID:i4ad2dwr
そこでzshですよ

151 :login:Penguin:2006/10/03(火) 13:56:04 ID:KeekA4F/
いや、ここはscsh
http://www.scsh.net/

152 :login:Penguin:2006/10/04(水) 18:13:19 ID:nvODb2Cn
bashコンパイラを書けば解決さw
bashってのは完全にプログラマの為の道具。
プログラマって人種が極度のキータイプ嫌いでものぐさな事を如実に示しているのがbash。
通常は最も手軽に動かせる言語で、だから初心者も使うんだけど非常に迷路じみて無愛想な言語。
適材適所で言うなら初心者には最も不適な部類の言語だと思う。

153 :login:Penguin:2006/10/04(水) 19:30:49 ID:K3dljP7/
rcがいちばん。


154 :login:Penguin:2006/10/04(水) 22:38:44 ID:FNsr3Nih
inittabインタプリタが切に欲しい。

155 :login:Penguin:2006/10/04(水) 23:15:48 ID:sl6UHG36
>>152
じゃあ初心者にはなにがいいのよ?

156 :login:Penguin:2006/10/05(木) 23:25:36 ID:zAfJdDDf
csh

157 :login:Penguin:2006/10/07(土) 10:34:31 ID:81nNYwVr
氏ね

158 :login:Penguin:2006/10/09(月) 23:35:33 ID:9KuWHWOZ
二つのsort,uniqされたファイル

file1
a
b
c

file2
c

があったとして、file1-file2>file3

file3
a
b

みたいことやりたいんですが、何てコマンド使えば良いんでしょうか?

159 :login:Penguin:2006/10/09(月) 23:41:56 ID:9la7eu6H
>>158

grep -v -f file2 file1 > file3

160 :login:Penguin:2006/10/10(火) 00:48:52 ID:j7TWTFqG
>>159
ありがとうございます!
すごく助かりました。

161 :login:Penguin:2006/10/10(火) 01:11:18 ID:34A8UKNC
そういえばgrepで除外を意味する-vの由来は何だろう。
校正記号の「トル」?

162 :login:Penguin:2006/10/10(火) 01:20:55 ID:lcIpK0vW
--invert-matchのvじゃね。

163 :login:Penguin:2006/10/10(火) 04:16:52 ID:j7TWTFqG
2000バイト以上のファイルを削除したい場合、どうしたら良いでしょうか?

findと組み合わせればよいのは分かるのですが、-sizeの使い方が良くわかり
ません。宜しくお願い致します。

164 :login:Penguin:2006/10/10(火) 04:21:26 ID:j7TWTFqG
すいません。
自己解決しました。

find . -size -2000c

165 :login:Penguin:2006/10/10(火) 04:43:41 ID:j7TWTFqG
ちょっと不親切でしたので、再投稿します。

find . -size +2000c -exec rm {} \;

で解決出来ました。お騒がせしました。

166 : ◆Zsh/ladOX. :2006/10/10(火) 23:29:53 ID:2MRSIVzd
vetoジャマイカ

167 :login:Penguin:2006/10/11(水) 02:58:14 ID:JyuHWbkO
>>166
む、納得しちゃいそう。

168 :login:Penguin:2006/10/13(金) 11:56:24 ID:Mn/ZCEtt
>>155
cでしょうに。
ただcから入るとc++で頭切替えるのが大変になる。
c++てcを書いてる人が多い。

169 :login:Penguin:2006/10/13(金) 12:14:19 ID:yGdobEUM
>>168
あえてネイティブで動かす必要のあるものを作る場合を除けば、いまどきCやる必要なんてないでしょ。
Rubyとかのスクリプト言語でサッと書いてサッと使ってサッと捨てる。

170 :login:Penguin:2006/10/13(金) 12:59:32 ID:Mn/ZCEtt
>>169
初心者向けの言語って意味だから。
プログラミング入門はcが王道でしょ。
いきなりrubyは高級すぎて何がすごいのかも理解できないと思うし。
まず単純で質素なcで学んでからの方がいい。
ちなみにおじさんはアッセンブラからやらされた。
その時はくだらないと思ったがcの過程でポインタや配列を即理解できてやっててよかったと思ったよ。

171 :login:Penguin:2006/10/13(金) 13:05:42 ID:i+BkCOk3
スレ違いの話はその辺で切り上げてくれないかな。

172 :login:Penguin:2006/10/13(金) 13:07:20 ID:Mn/ZCEtt
ついでに言えばアッセンブラとcは極論すれば書き方が違うだけで同じだった。
だがcとc++は根底が違う、見た目が一緒だから厄介。
>c++てcを書いてる人が多い。
の一人だったよ。
rubyの根底を理解するには基準としてcをやっておいて損はないと思う。
命令や文法だけ暗記しても無意味だから。
ちなみにperlはおおげさなものは何もない。
cの次にperlを初心者向け言語の候補に上げよう。
だらしないコードを書くようになる危険があるが。

173 :login:Penguin:2006/10/13(金) 23:31:27 ID:w5YU+1sG
>だがcとc++は根底が違う、見た目が一緒だから厄介。

マルチパラダイム言語という名の元、構造化プログラミングと言う枯れた手法を用いることもまた合法。


174 :login:Penguin:2006/10/14(土) 02:26:44 ID:4wDWWWIQ
【sed】シェルスクリプト総合@LINUX Part2【awk】

175 :login:Penguin:2006/10/14(土) 11:42:14 ID:awFbXLqQ
tccでスクリプト書けば最強ということでFA?
いや実際ツールコマンド化されてないシステムコール叩けて便利だけど。


176 :login:Penguin:2006/10/14(土) 13:43:44 ID:aJtsd/OF
「○○しますか?[Yes]/[No]」
と言うダイアログを表示させて、その後の処理を選択したとおりに分岐させたいのですが
コマンド一覧などでは見つかりませんでした。

参考になるサイトなどがあれば教えて下さいm(_ _)m

177 :login:Penguin:2006/10/14(土) 15:20:50 ID:ZNsxMjW/
>>176
gnomeならzenityってのがある。

178 :login:Penguin:2006/10/14(土) 15:30:22 ID:vHgMANEE
>>177
ありがとうございます。早速逝って来ます

179 :login:Penguin:2006/10/14(土) 15:44:47 ID:pcLZXe+4
>>176
dialog とか。

180 :塩水 ◆1FrMT.vzQQ :2006/10/14(土) 20:07:07 ID:alqqP7TT
おもに計算はfortranでやって、ファイルの処理をシェルスクリプトとかでやってる。
計算終わってはかれたログを整理したりgnuplotで描画できるようにデータを変換したりする。
だいたいシェルスクリトプトとsedとawkで処理できるかなと思ってたけど、ちょっとした
計算に不都合があった。シェルスクリプトだと少数が含まれる計算や割算のやりかたが
よくわからない。awkは引数としてファイルを指定して、そのファイルの中身をいじくるのは
スムーズなんだけど、第一引数と第二引数に直接値を指定して、その引数同士で
計算させるというのが案外難しい。引数の定義をawk側でごにょごにょしないといけないみたい。
その点perlはARGVで直接ひっぱってきてささっと計算できた事をもってして、
ああ、perlも便利なものだったんだなって思えた。
これからperlも勉強してみようと思うんだけど、Rubyのああ、やってて便利だなと
実感できる強みみたいなモノってあるのかな。オブジェクト指向になってて、開発してて
楽しいスクリプトだという概観みたいなモノは把握したんだけど、まだいまいち実感がわかない。
まずオブジェクト指向なるものがそれほど理解できてないからかもしれないけど。
だんだんスレタイからずれてきた…

るびらーの人がいたらおもしろそうな魅力をちょこっと教えてほしいな。

181 :login:Penguin:2006/10/14(土) 20:18:30 ID:iEFH5wj3
>>180
て言うかなげぇよ。

182 :塩水 ◆1FrMT.vzQQ :2006/10/14(土) 20:38:03 ID:alqqP7TT
ごめん。
スクリプトは遅いって言われてるけど、そこまで動作速度に不満を感じることなんて
ほとんどと言っていいほど無いんですよね。コンパイルという作業をかましてまで
速度を向上したいというようなプログラムは私的な状況の改善くらいでは特に感じない。
商品開発したり、いろんなマシンでも動くようなプログラム作ったりするのに
コンパイルするようなプログラムが必要なのかな?でもperlなら大概のマシンで動くし。
科学技術計算はさすがにスクリプトじゃ無理だけど、身近な問題の改善なら
スクリプト言語でじゅうぶんだと思った。と、懲りずに長文感想文。

183 :login:Penguin:2006/10/14(土) 20:40:02 ID:iEFH5wj3
>>182
2行だけ読んだ。それに関しては激しく同意。

184 :login:Penguin:2006/10/14(土) 21:58:28 ID:vHgMANEE
>>179
ありがとうございます。
早速これも調べてみます

185 :login:Penguin:2006/10/15(日) 17:26:52 ID:hHCRRLT3
>>176

gtkというアプローチも。XでGUIプログラミングに便利かも。

手早い選択肢としては、179のdialogに同意。

186 :login:Penguin:2006/10/15(日) 20:04:48 ID:Dk9VntiV
dtkshとか。


187 :login:Penguin:2006/10/19(木) 20:47:24 ID:FQ6Ui9I8
すいませんが教えてください

/old の全ファイルを /new にコピーを行いたいのですが、
もし /new に同名のファイルがあれば、そのファイルはコピーしない
というのをやりたいです

教えてスレではないと思うのですがよろしくお願いいたします

188 :187:2006/10/19(木) 20:48:09 ID:FQ6Ui9I8
あ、すいません bash です

189 :login:Penguin:2006/10/19(木) 21:02:16 ID:rKeC8zcr
>>188
cp をうまく使えばできないかい。
$ man cp
cp -u とか

190 :login:Penguin:2006/10/19(木) 21:03:31 ID:up7gNFzc
>>187
自分ではどこまでできたの?

191 :login:Penguin:2006/10/19(木) 21:04:10 ID:O9X2awX6
>>188
ちゃんとmanよめよ。

>>189
この場合だと-iでいいんじゃないかな。

192 :login:Penguin:2006/10/19(木) 21:06:45 ID:rKeC8zcr
>>191
.bashrc に alias で指定してあると思うが、じゃあ
cp でいいな。

193 :login:Penguin:2006/10/19(木) 21:43:51 ID:tD+4Ba/E
rsync が一番適切なんじゃないの?

194 :login:Penguin:2006/10/19(木) 21:46:20 ID:bIjdLPn3
>>193
たぶんそれが一番だと思う。

195 :login:Penguin:2006/10/19(木) 23:16:23 ID:LdXdiqxq
yes no | cp -ia ...


196 :login:Penguin:2006/10/20(金) 00:27:54 ID:txS6575E
tar -C old -cf - . | tar -C new --keep-old-files -xvf -

197 :login:Penguin:2006/10/20(金) 14:30:44 ID:lljI9Z8i
すみません。findコマンドで
find ~ -name '*.sh' -exec rm -f {} \;

みたいなコマンドを良く見掛けるんですけど、後ろの「{} \;」って
どういう意味があるのでしょうか?

198 :login:Penguin:2006/10/20(金) 15:03:24 ID:jcp0YpyW
>>197
まず、findの-execスイッチは、「-exec command ;」という形式をとるの。
というところまではわかってる?まずこの点findのman読んで復習して。

{}の意味については、やっぱりfindのmanの-exec...の項を読むとみつかるはず
だから探してみて。

\;は、元々は-exec...;の最後の;。
なんだけど、シェルが;をコマンドの区切りとみなしちゃう(findの-execスイッチの
一部分だとはシェルには解釈しない&できない)から、それを防止するために
エスケープして\;と書くの。

199 :login:Penguin:2006/10/20(金) 15:37:04 ID:lljI9Z8i
>>198
あ、エスケープの「\」だったんですね。
manを読んでみます。

検索しても使いかただけとか、{}で検索しても良いページがでなかったもので。

200 :login:Penguin:2006/10/20(金) 15:53:46 ID:lljI9Z8i
'*.sh'でヒットしたファイルをカウンターにして
forのようにまわして、{}にその引数の中身を展開して実行してるみたいですね。

for i in (ファイルのあるPATH)/*.sh ; do
rm -f $i
done

みたい。

201 :login:Penguin:2006/10/20(金) 20:51:18 ID:sPhZqjis
http://vine.ic.sci.yamaguchi-u.ac.jp/
の自動更新スクリプトも核はsedで書かれているらしい。

202 :login:Penguin:2006/10/25(水) 17:04:32 ID:N8gV8hQo
あるディレクトリを作成、その下にディレクトリツリー(movieとかaudio、更にそのmovieやらaudioディレクトリの
下に01、02〜の様な)を 作成してツリーの大元に戻って大本のフォルダをリネームをしたいのですが
最後の対話式でリネームする部分が難しくてうまい事作動してくれません。どなたか救いの手を…


203 :login:Penguin:2006/10/25(水) 17:15:20 ID:tU4cUr/G
>>202
今どこまで書けたの?

204 :login:Penguin:2006/11/04(土) 14:41:24 ID:8GhdlUfe
質問です

通常シェルスクリプトを書くとき,シグナルを受け取った時の
処理をシグナル毎に書くと思うのですが,逆に
どのシグナルが送られてきたか調べる方法はありますでしょうか?


205 :login:Penguin:2006/11/04(土) 21:47:32 ID:WxZzepoe
ないんじゃない。

myhandler () {
  local sig="$1"
  ...
}
trap "myhandler 1" 1
trap "myhandler 15" 15

とかじゃだめ?

206 :login:Penguin:2006/11/05(日) 11:33:47 ID:wGRiE4/g
>>205
やっぱりひとつひとつ調べないと無理ですか...(´・ω・`)ショボーン

あざーす

207 :login:Penguin:2006/11/05(日) 13:28:09 ID:RXI70RMP
誰か暇な人解いて

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

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

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


208 :login:Penguin:2006/11/05(日) 13:37:45 ID:i3mgyo4j
switch文なんてないから不可能だな。

209 :login:Penguin:2006/11/05(日) 13:41:46 ID:2kXaFaWm
揚足取り乙


210 :login:Penguin:2006/11/05(日) 13:45:34 ID:6dyarNgd
宿題は自分で。

211 :login:Penguin:2006/11/05(日) 14:56:58 ID:swozWI3K
マルチかよ…

212 :login:Penguin:2006/11/06(月) 00:02:57 ID:q5pzIs6H
お勉強中の素人です。

rsh 許されていないサーバとのやりとりを絡めた処理を
やらせる為 , 一部 expect を使おうと思っています。

で , expect の send は実行したいコマンドを " で括りますが
" 自体をコマンドで使いたい場合はどうすればいいのか
ワカランです。

教えてくだされ。


213 :login:Penguin:2006/11/07(火) 18:02:42 ID:uIiz0qVx
お舞らちょっと漏れの愚痴を聞いて下さいませんか。

今GNU findを使ってディレクトリツリーのファイル一覧を出力したんだが、
日本語(EUC-JP)の名前が付いたファイルが上手く表示されねぇ。

以前は同じ
$ find . -ls
なんかで、ちゃんと表示されてたのに。

仕方ねーから、man findをじっくり読んでみた訳よ。

 UNUSUAL FILENAMES
          :
   -ls, -fls
      Unusual characters are always escaped. White space, backslash,
      and double quote characters are printed using C-style escaping
      (for example '\f', '\"'). Other unusual characters are printed
      using an octal escape. Other printable characters (for -ls and
      -fls these are the characters between octal 041 and 0176) are
      printed as-is.

非ASCII圏は無視ですか。そーですか。
version 4.2からこんな仕様になっていたとわ… orz


214 :login:Penguin:2006/11/07(火) 18:07:07 ID:pP57+mqL
>>213
find . | nkf -e
でもしとけ。

215 :login:Penguin:2006/11/07(火) 18:16:17 ID:3/rl4qfJ
less なら文字化けしないんだけどね。

216 :login:Penguin:2006/11/07(火) 18:24:34 ID:uIiz0qVx
>>214
いや、だからfindが出力するファイル名自体が、既にASCIIで
\213\245\216\270...
になってるんですって。UNUSUALにされてしまうのです。

愚痴るだけではあれなので…
>>212
expectって結局はtclだから、\でエスケープ出来ない?
"command" なら "\"command\"" みたいに。


217 :213:2006/11/07(火) 18:32:30 ID:uIiz0qVx
上レス番号付け忘れますた。

>>214>>215
確かに-print系では、出力が端末以外なら、そのまま表示できますが、
-lsで一気に詳細情報まで得ようとすると、どうやっても勝手に変換と。

一々-exec ls -l {} \;とか-printfで指定してやらにゃならんのか… o...rz


218 :login:Penguin:2006/11/07(火) 18:36:55 ID:3/rl4qfJ
>>216
find に文句がいいたのですね。
「find でリストを作るのに nkf 噛ませないと行けないなんて find は使えねーな。」
ってことでしょうか。

219 :login:Penguin:2006/11/07(火) 20:06:37 ID:TyjbxAWs
>>218
nkf噛ませてもダメだから困ってるんじゃないの?

220 :login:Penguin:2006/11/07(火) 21:01:30 ID:3/rl4qfJ
>>219
nkf 噛ませれば問題ないよ。

221 :login:Penguin:2006/11/07(火) 22:05:32 ID:pP57+mqL
>>217
ああ -ls option の問題なのか。
いつも省略してた(-print が使われる)から分からなかった。
確かにASCIIになっちまうな。

これpatchないのかな?

222 :login:Penguin:2006/11/09(木) 22:18:47 ID:hxGsWwCw
patchつーかバグレポ対象だろ、これ。
少なくともlocale見て動けYO!位はいっていいんじゃない


223 :login:Penguin:2006/11/09(木) 23:07:28 ID:Fy+EWKU1
>>222
>patchつーかバグレポ対象だろ、これ。

バグレポートだけよりパッチつきで報告してくれるほうがはるかに有意義だ。

224 :login:Penguin:2006/11/18(土) 17:28:51 ID:IVoEU4qc
シェル変数$tstvar1がwhileループ内で局所されて?しまいます。
ループの外で参照するにはどうしたらいいですか?
ちなみにforループで違う感じにまわしてみたのですが$tstvar2は
局所されなかったとです。んん?
$ cat tst.sh
#!/usr/bin/env bash

seq 1 $1 | while read line ;do
tstvar1=$line
done

for i in $(seq 1 $1);do
tstvar2=$i
done

echo while loop last num is $tstvar1
echo for loop last num is $tstvar2
#=====================================

$ ./tst.sh 5
while loop last num is
for loop last num is 5


225 :224:2006/11/18(土) 17:32:22 ID:IVoEU4qc
m(_ _ )m
× 局所
○ 局所化

226 :login:Penguin:2006/11/18(土) 18:02:59 ID:6vMNnicg
zsh使え

227 :224:2006/11/18(土) 18:20:24 ID:IVoEU4qc
bashでおねがいしますm(_ _)m

228 :login:Penguin:2006/11/18(土) 22:20:15 ID:BOjrTH30
$ cat test.sh
#!/usr/bin/env bash

seq 1 $1 > /tmp/hogehoge.tmp
exec 3<&0 </tmp/hogehoge.tmp
while read line; do
tstvar1=$line
done
exec 0<&3 3<&-

echo while loop last num is $tstvar1
$ ./test.sh 5
while loop last num is 5

リダイレクト or パイプだとサブシェルが起きちゃうからファイルに落とさないとむりぽ.

229 :224:2006/11/18(土) 22:28:24 ID:IVoEU4qc
そかー、サブシェルになっちゃってたんですねえ。
すっきり&たすかりましたm(_ _)m


230 :login:Penguin:2006/11/18(土) 23:17:36 ID:dOjBUY29
ど初心者の質問で申し訳無いんだけど、単語を2列ずつにする
のってどうすればいいんですか?↓こんなファイルを

apple
but
chance
data
e-mail
funny

↓このようなファイルに変えたいんだけど、、、

apple but
chance data
e-mail funny

231 :login:Penguin:2006/11/18(土) 23:27:29 ID:qmA4jFhb
>>230
sed -ne 'N;s/\n/ /;p'

232 :login:Penguin:2006/11/18(土) 23:41:43 ID:qEn0qBZD
>>230
column -c 16 ファイル
はだめなんだろな。。。

233 :login:Penguin:2006/11/18(土) 23:42:31 ID:2K6k+fAl
paste - -


234 :login:Penguin:2006/11/18(土) 23:43:40 ID:KEL72rWc
>>224
bsh系で挙動が違うものの代表格だな。

kshだと、局所化されない。
bsh(V7やSolarisなど)は、局所化される。
bashも局所化される。

一方↓の場合、
while read hoge
do

done < fugafile

bsh(V7やSolarisなど)は、局所化される。
ksh、bashだと、局所化されない。



235 :login:Penguin:2006/11/19(日) 01:07:47 ID:75ySYxGK
>>231 >>233
ありがとうございます!めっちゃ感動しました

>>232
実はCygwinでやってるのだけれどcolumnコマンドが入ってなくて・・・

236 :login:Penguin:2006/11/19(日) 11:08:03 ID:PNiLk3lU
>>233
その手は知らなかった。

237 :login:Penguin:2006/11/21(火) 17:25:32 ID:RPVTOsSL
シェル関数について質問なのですが、シェル関数実行時に標準出力をファイル等にリダイレクトした場合には、
その関数はサブシェルで動作するとなっているのですが、何度試してもカレントシェルでの動作になります。
これは正常な動作なのでしょうか?
それともシェル関数をサブシェルで動作させるには他に何か条件があるのでしょうか?
因みにシェルはbashを使っています。

238 :あほ初心者:2006/11/22(水) 00:12:00 ID:IxrPWlIp
すいません
while文を使用したループで[条件1]もしくは[条件2]の場合ループを抜けるという
or条件を指定したいんですけど、
やり方が判らないです。。。。


どなたか教えてください。
↓↓↓の条件の[ $a -lt 3 ]に[&b_flg = "OFF"]というor条件を追加したい感じです。


-----------------
#!/usr/bin/

a=1

while [ $a -lt 3 ]
do
a=`expr $a + 1`
done

239 :login:Penguin:2006/11/22(水) 00:14:15 ID:bnqD2I+t
while [ $a -lt 3 -o b_flg = "OFF" ]

man test

240 :login:Penguin:2006/11/22(水) 00:16:08 ID:Q3Q+e0H3
whileで指定するのは、ループを「続ける」条件。

241 :login:Penguin:2006/11/22(水) 00:22:03 ID:bnqD2I+t
>>240
裏を取れば終了条件。
応用力0すか?

242 :login:Penguin:2006/11/22(水) 00:31:45 ID:8zJkxMvj
単に訂正しただけっしょ。

243 :login:Penguin:2006/11/22(水) 00:32:08 ID:JDMO7VWz
初めまして。突然失礼します。
学校の課題なのですが・・・

「ディレクトリ、/usr/binにある全ての実行可能ファイルのman一行出力をテキストファイルに書き出す。ファイルの数は膨大なので、スクリプトを書いて処理すること。」

このシェルをつくらないといけないんですけど
どなたか教えてください><

244 :login:Penguin:2006/11/22(水) 00:47:21 ID:2GKTJH4U
そりゃいかんだろ。しかも、何にも知らない学生に出すような課題じゃないし、せいぜい悪あがきすることだ。

245 :あほ初心者:2006/11/22(水) 00:49:03 ID:IxrPWlIp
レス有難うございます。

>>239
これやってみたら無限ループしちゃいました(泣)

>>240

カウンターが3未満の場合、かつフラグが"OFF"の間ループさせたいのです・・・・。

246 :login:Penguin:2006/11/22(水) 00:57:36 ID:jTQUwjrV
>>243
その課題、前にどっかのスレで見たな。
過去に同じ質問をしたおバカな先輩がいるみたいだな。w


247 :login:Penguin:2006/11/22(水) 01:29:46 ID:tazRDaIV
>>243
シェルって言うな。
教えてやんない。

248 :login:Penguin:2006/11/22(水) 01:48:04 ID:hxP9MaWC
>>243
ls /usr/bin | (while read f ; do whatis $f ; done) > shell_tte_iuna_baka.txt

249 :login:Penguin:2006/11/22(水) 09:10:37 ID:+iDbTTrl
>>239
×b_flg = "OFF"
◯$b_flg = "OFF"
でしょ。

>>245
>かつフラグが"OFF"の間
"かつ"ならor条件じゃなくand条件でしょ。
while [ $a -lt 3 -a $b_flg = "OFF" ]


250 :login:Penguin:2006/11/22(水) 09:55:53 ID:V6McRbrX
自分がスクリプト書くときは、繰り返す場合いっつもforつかいます。
それは、なんらかのバグがあったときにforならあるところまでで必ず止まるという
安心感があるからです。

ところが、このスレではwhileを使っている人を結構見掛けるのですが、
どういう時に繰り返し処理をwhileで書こうと考えているのでしょうか?

251 :login:Penguin:2006/11/22(水) 10:23:48 ID:UPqdXOUd
>>250
なんだなんだ?確認するが「シェル」スクリプトの話でいいんだよね?

forとwhileじゃ意味がずいぶん違うじゃん。whileは変数を束縛しないでしょ。
それと、実行前に範囲が決まらない処理なんていくらでもある。

252 :login:Penguin:2006/11/22(水) 10:27:53 ID:V6McRbrX
>>251
例えばtest1、test2...みたいなファイルを消す場合は

for i in `seq 1 1 9`; do rm test$i ; done
rm -f test??

みたいな感じでシェルスクリプト書いてるんですよ。
なんかバグってwhileで意図しないファイルまで消されてしまうような気がして、
あんまりwhileを使いたくないんです。気分的に。

ただ、whileならではの利点みたいなものが見えれば、whileを勉強する意欲が
湧くかなって思ったので、そのwhileの魅力みたいなモノがあれば教えていただければ
と思いました。

253 :login:Penguin:2006/11/22(水) 10:29:59 ID:hxP9MaWC
>>250
for(i = 0; i < MAX; i++) {
    printf("infinite loop\n");
    $i = 0; /* this code is fatal bug */
}

上記の通り、バグで止まるかどうかという意味ではforも同じです。
使い分けは、ループの意味で分けるのが可読性の観点で好ましいかと。
一定回数カウント、もしくはイテレータで繰り返してループするものにforを、
回数不定で特定の条件を満たすまでループするものにwhileを、というのが
一般的かと思われ。

254 :login:Penguin:2006/11/22(水) 10:38:06 ID:hxP9MaWC
ごめんCのこと書いた。

255 :login:Penguin:2006/11/22(水) 10:40:40 ID:V6McRbrX
>>253-254
なるほど、whileの使い分けとしては回数で止めるか、条件で止めるかということですか。

でもなんだろう、この自分の中の漠然としたwhileに対する不安感は、やっぱり
使ったことが無いからなのかもしれないですね…
whileの練習もかねて意識して使うようにしてみます。
ありがとうございましたm(_ _)m

256 :login:Penguin:2006/11/22(水) 14:15:34 ID:pcMmUayC
変数に"/"が入っている文字列を"/"部分だけ
"\/"にしたいのですが、
sedでできません。
誰か良い方法をご存知でしょうか?

test=test1/test2
sed "s/\//$test/g"

【実行結果】
sed: 1: "s/\//test1/test2/g": bad flag in substitute command: 't'


257 :login:Penguin:2006/11/22(水) 14:45:17 ID:o0UyRkyX
一番手っ取り早いのは、
sed "s|/|$test|g"


258 :login:Penguin:2006/11/22(水) 20:58:02 ID:/ICllq1f
誰も突っ込まないのは…釣り?


259 :login:Penguin:2006/11/22(水) 21:47:57 ID:bnqD2I+t
>>258
アホか。

260 :login:Penguin:2006/11/22(水) 22:14:13 ID:o0UyRkyX
しまった。つられた。

test=$(echo $test | sed "s/\\//\\\\\//g")
バッククォートなら、
test=`echo \$test | sed "s/\\\\//\\\\\\\\\\//g"`


261 :login:Penguin:2006/11/23(木) 00:05:41 ID:cxW9On4t
折角のLinux板なので
${test//\//\\/}
なんつーbash限定の方法は如何?


262 :login:Penguin:2006/11/23(木) 07:59:05 ID:CuFvrJz+
sugeeeeee

263 :login:Penguin:2006/11/23(木) 17:33:38 ID:RM/e3Lly
ぜんぜんすごくない。
典型的なキモい拡張の代表格じゃん。


264 :login:Penguin:2006/11/23(木) 18:51:01 ID:CuFvrJz+
>>263
別にお前がすごいと思おうが思わないだろうが関係ないよ。
俺がすごいと思っただけだから。

265 :login:Penguin:2006/11/23(木) 21:37:51 ID:9rWiEH/g
>>264
そして、そんなお前を俺はダセェと思ったんだ。


266 :login:Penguin:2006/11/23(木) 21:45:03 ID:i/t/5yj6
bash 限定なら便利だよね。

267 :login:Penguin:2006/11/24(金) 15:37:53 ID:QetvQUTA
こんにちは。

19/Nov/2006
19/Nov/2006
20/Nov/2006
21/Nov/2006
21/Nov/2006
22/Nov/2006

なファイルがあり、それぞれ数えて

19/Nov/2006 2
20/Nov/2006 1
21/Nov/2006 2
22/Nov/2006 1

としたいのですが、どすればいいでしょうか?ヒントでも良いので
お願いします!



268 :login:Penguin:2006/11/24(金) 15:50:58 ID:q4M0kGa+
uniq -c

269 :login:Penguin:2006/11/24(金) 15:56:39 ID:QetvQUTA
>>268
こんなに早く解答を頂いて、本当にありがとうございます!
とても助かりました。

270 :login:Penguin:2006/11/24(金) 18:24:46 ID:oYJh4kFu
test="A<タブ>B<タブ>C"
echo "$test" | while read in line
do
echo "$line"
done

を実行すると、
B<タブ>C
となってしまいます。

A<タブ>B<タブ>C
と得るにはどうしたらよいでしょうか?


271 :login:Penguin:2006/11/24(金) 19:13:41 ID:ZfQxSWxT
>>270

1. while read line

2. echo "$in<タブ>$line"

3. IFS='
'

好きなの使え

272 :あほ初心者:2006/11/25(土) 00:30:44 ID:PS7K2G+h
>>249

返事遅れてスイマセン。。。。
書いてある条件でやったらできました。-aや-oの指定方法理解できました。

有難うございました

273 :login:Penguin:2006/11/26(日) 05:31:22 ID:AL6bt30h
sedはignorecaseでのマッチングはできないんでしたっけ?

274 :login:Penguin:2006/11/26(日) 08:58:39 ID:pXTU5C4T
>>273
/regexp/I
とか
s/regexp/replacement/I
とか


275 :login:Penguin:2006/11/26(日) 12:59:06 ID:AL6bt30h
>>274
どうも。GNU拡張だったみたいですね。

276 :login:Penguin:2006/11/26(日) 13:11:11 ID:FneAj50i
sed、awk、tar、cpioはgnu版が一番。


277 :login:Penguin:2006/11/26(日) 13:14:41 ID:LjpahU1Z
GNU 版以外になんかあったっけ。

278 :login:Penguin:2006/11/26(日) 16:06:21 ID:bXQDH3xo
awkはgawkだよね < 正式名称(?)
tarもgtarだ

sedとcpioは?

279 :login:Penguin:2006/11/26(日) 20:31:37 ID:gEHgbYsL
>>278
gsedとicpo

280 :login:Penguin:2006/11/27(月) 00:15:49 ID:UE44ZgMS
>>278
http://www.gnu.org/software/tar/
別に gtar が正式名称ってわけじゃない。
OS 標準の tar が別にある場合に
それと区別するために
gtar というコマンド名でインストールされることがある、
ってだけ。

sed も cpio もそのまんま。
http://www.gnu.org/software/sed/
http://www.gnu.org/software/cpio/

281 :login:Penguin:2006/11/27(月) 01:47:31 ID:bWyCbzl1
ggrep …ぐぐれっぷ。

282 :login:Penguin:2006/11/27(月) 02:14:33 ID:B8mdaK4S
BSD系はGPL汚染を避けるために独自のunix toolそろってるよね。
今でも完璧にGPLフリーなの?

283 :login:Penguin:2006/11/27(月) 02:24:39 ID:UE44ZgMS
>>282
C コンパイラは gcc 使ってなかったっけ。
まぁ、詳細は UNIX 板で聞いてくれ。

284 :login:Penguin:2006/11/27(月) 02:25:13 ID:UE44ZgMS
GPL 汚染を避けるためってより
元からあるのを使い続けてるだけ。

285 :login:Penguin:2006/11/27(月) 02:46:22 ID:cP0Kjc7q
sedでもなんでもいいですけど、
ABC
DEF
GHI
という改行入りの文字列を
ABCDEFGHI
としたいのですが、
231 を真似て、
sed -ne 'N;s/%\n//;p'
としてみましたが、
ABC
と一行の場合は、空白になってしまいました。

どうすれば実現できますか?


286 :login:Penguin:2006/11/27(月) 03:00:07 ID:OelJATmM
>>285
while read line;
do
echo -n "$line"
done <<END
ABC
DEF
GHI
END

echo
----
とかではあかんの?

#>>285さんもお仕事中ですか?
#私の方は目途が付いたのでそろそろ仮眠入ります(=.=)

287 :login:Penguin:2006/11/27(月) 07:10:55 ID:Jc9GP2Cc
> 280さん
そうなんだ
正式名称ってわけではないのっすね
Solarisでびっくりした記憶が

むぅ
ねむい


288 :login:Penguin:2006/11/27(月) 07:50:47 ID:bqAw+xNf
>>285
tr -d "\n"

289 :login:Penguin:2006/11/27(月) 22:38:33 ID:0CtuQywK
アホな初心者なんだけど教えて!

$Aと$Bにはそれぞれ時刻が(xx:xx:xx)の形式で格納されているんだけど
これを$Aと$Bの比較を行いそれぞれ条件分岐で表現させたいんだが
どうすればいいだろう?

if文でずっと考えていたんだが
文字列と数列演算の比較しか調べても出てこなかった。

290 :login:Penguin:2006/11/27(月) 22:54:05 ID:Bw+6GoCc
>>289
$A と $B を date コマンドで変換して比較するとか。

date -d "$A" '+%s'

291 :login:Penguin:2006/11/27(月) 23:06:21 ID:Gl6W36sR
xxの部分が必ず二桁であるなら、言い換えれば、コロン除いて必ず6桁であるならば、

[ "`echo \$A|sed \"s/://g\"`" -eq "`echo \$B|sed \"s/://g\"`" ]
とか。

bash依存でいいなら、
[ ${A//:} -eq ${B//:} ]



292 :login:Penguin:2006/11/27(月) 23:09:28 ID:bqAw+xNf
>>289
:を削除すればいい

293 :login:Penguin:2006/11/28(火) 00:06:04 ID:9U2/5wlL
感動した

294 :login:Penguin:2006/11/28(火) 00:23:02 ID:fFcPBnEd
あるファイルの一部(何行もある)を違うファイルに書き換えるのはどうやるの?
例えば、

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の置換する行を書かせて実行したら
一日で終わらないくらい時間がかかってしまって。。。
もしくは、行単位で置換じゃなくて、数行単位で置換は出来ないのでしょうか?

偉い人教えてください。

295 :login:Penguin:2006/11/28(火) 00:37:14 ID:ve7hOhUi
sed -e 's/abc 1 2/abc 1 2 10/gc' -e 's/abc 3 4/abc 3 4 20/gc' <input.txt
とか。

296 :login:Penguin:2006/11/28(火) 00:54:27 ID:S83lGj9/
>>295
そのabc 1 2ってところがファイルの内容によって変わるから-eでは指定できなくて
困ってんじゃないの。

俺ならperlに逃げるが、...
どうしてもsedでやるなら、「2番目のファイルから>>295のようなsedスクリプトを
生成する」というスクリプトをsedなりawkなりで書くんだろうな。


297 :login:Penguin:2006/11/28(火) 01:38:28 ID:hlMS5leM
294だけどそれを数だけ書いて実行したらどえらく時間がかかってしまって…

298 :login:Penguin:2006/11/28(火) 02:13:27 ID:S83lGj9/
マルチ。
ttp://pc8.2ch.net/test/read.cgi/tech/1112553783/

速度向上の話はシェルスクリプトの話というよりアルゴリズムの話なのでは。
そっち方面のスレの方が相手にしてもらえる。

遅いだろな。>>296-297の話だと「1番目のファイルの行数×パターンファイルの行数」
回だけパターンマッチを繰り返すんだからさ。

パターンが正規表現じゃなく固定文字列&対象フィールド固定でいいみたいだから、
ハッシュ表の応用が吉。2番目のファイルのパターン指定部分をkeyとして、
dbmとかRDBとかいろいろ速い方法がある。

299 :login:Penguin:2006/11/28(火) 07:24:19 ID:tF5D3BVE
タグで抽出してからいじれ

300 :login:Penguin:2006/11/28(火) 15:20:17 ID:OR43oAVg
いずれにせよ行指向なシェルスクリプト+αにゃ不向きだな。
置換したい行の位置が変わってもよければまだなんかありそうだが。

301 :login:Penguin:2006/11/30(木) 15:18:39 ID:qADJb4/Z
シスログなどのファイルからエラー項目を取り出して、
対象となるデーモンをリスト化したファイルとマッチさせて
対象があれば正という処理をしたいんですが
参考となるスクリプトを掲載したHPはありますか?

考えられるキーワードでググっても出てこないので
困ってます。

302 :login:Penguin:2006/11/30(木) 15:29:18 ID:VjTlzCpk
grepで済むと思うが

303 :login:Penguin:2006/11/30(木) 15:48:37 ID:qADJb4/Z
で、問題はこれを5分間隔でやっているので
その間に発生したエラーログのみ監査対象が限定されるのです。

シスログの日付とlocaltimeを比較しないとダメなんです。

304 :login:Penguin:2006/11/30(木) 19:53:42 ID:5H/Ib3vS
ならdateとgrepで済むと思うが

305 :login:Penguin:2006/11/30(木) 20:45:11 ID:bn6C4MA9
>>303
最近のsyslogdなら、名前付きパイプに対応してる。
FIFO経由で順次処理の方が良いんじゃね?


306 :login:Penguin:2006/12/01(金) 19:53:40 ID:gsraXxcw
ところで、シスログなどのファイルをリストとして読み込むには
皆どう処理してる?

307 :login:Penguin:2006/12/01(金) 23:24:27 ID:+exVUFbt
>>294
awkで書いて見た。久しぶりに使ったけど便利だな。
BEGIN{
while( getline p < ARGV[1] >0){
split(p,a," ")
word[ a[1] + a[2] ] = a[3]
}
ARGV[1] =""
}
{
if( word[ $1 + $2 ] != "" ) {
print $0 " " word[$1 + $2]
} else print $0
}


308 :login:Penguin:2006/12/02(土) 11:18:13 ID:MFbNlyXD
>>307
ちょっとだけ修正
word[$1 + $2]は
word[$1 + " " + $2]の方がいいかも
word[$1 + $2]だと "abc" + "1"が"abc1"になるので
"abc" + "1"と"ab"+"c1"が両方とも"abc1"になってしまう。
>>294のように文字数が一定なら問題ないけど。
まあ実用にするんだったらもっとあちこちいじらないとダメだな。

309 :login:Penguin:2006/12/02(土) 14:12:26 ID:9wM9eGR+
>>307,308
それマルチ
http://pc8.2ch.net/test/read.cgi/tech/1112553783/448
http://pc8.2ch.net/test/read.cgi/tech/1112553783/453-456

つーかよく仕様を読み取ったな。
あっちのスレで追加ヒントを出されたけど
全く法則性をつかめなかった。IQ低いんだな>オレ

310 :login:Penguin:2006/12/02(土) 15:15:50 ID:IOXyzmke
一万行あったら終らない。

311 :login:Penguin:2006/12/02(土) 16:40:12 ID:h1TrJh+k
スクリプトでなんともできない量なんだったら、
いっそCで組むなりDBにいっぺんつっこんでなんかで処理するなりしたほうが。

>>303
1. いっぺんログ(a)を全部コピる(b)
2. 5分たったら(b)の行数分だけ(a)からはじいて更新行だけ抜く(wcなりtailなりdiffなり)
3. 抜いたものに処理かまして1.に戻る

312 :login:Penguin:2006/12/02(土) 17:04:04 ID:6y2Ykjot
以下のような配列から

20061201120000 **** ***** ****
20061201130000 **** ***** ****
20061201132000 **** ***** ****
20061201132100 **** ***** ****

while文で上のリストを読み込んだときに
左1番目の日付記録と現在の記録を比較して
5分以内のみを取り出して別のファイルに読み込ませる
ということを行いたいです。

whileとifの組み合わせでうまくいかないんですが
皆さんならどう書きますか?

313 :login:Penguin:2006/12/02(土) 17:28:33 ID:h1TrJh+k
まずは自分がどう書いたかだ。

314 :308:2006/12/02(土) 18:00:30 ID:RMFwKrIK
>>308
おおボケかましてた。
>word[$1 + $2]だと "abc" + "1"が"abc1"になるので
"abc" + "1" は 1 だった。
+を抜いて word[$1 " " $2]こうしないと
BEGIN{while(getline < ARGV[1]) word[$1 " " $2] = $3; ARGV[1] = ""}
{ if(word[$1 " " $2]){ $4 = word[$1 " " $2]
#ここも追加
}else delete word[$1 " " $2];
print $0
}

END{for( s in word) print s "=" word[s];}
これで見るとif(word[$1 " " $2])の時にwordに追加されるようで
でかいファイルでやってたらメモリが足りなくなる。でdelete を追加。
>>294のデータでのテストならちゃんとした結果が出るが
実際のデータでやってたらおかしな結果になったんだろうな。
危ない危ない。もうない事を祈ってorz

315 :login:Penguin:2006/12/02(土) 18:08:46 ID:HEbI++rQ
ふつーに word[$1, $2] でいいのではないかと。
多次元配列のように見えるけど、実体は word[$1 SUBSEP $2] という
組み込み変数 SUBSEP で連結しただけの1次元配列。


316 :login:Penguin:2006/12/02(土) 21:01:28 ID:6kGljnD5
こんな感じかな?

gawk 'BEGIN{ filt=strftime("%Y%m%d%H%M%S",systime()-300) } $1>=filt{ print }'  < 元ファイル > 新ファイル名

317 :login:Penguin:2006/12/03(日) 00:26:39 ID:A8uHmA87
>>312
(d=`date -d -5min +%Y%m%d%H%M%S`; while read l r; do if [ "$l" -gt "$d" ]; then echo "$l $r"; fi; done) < list > other

318 :312:2006/12/03(日) 13:51:58 ID:N72hre3c
>317
ありがとうございます。

私は今こんなスクリプトで書いていますが検討もつきません。


cat /var/log/errlog | sed -e "s/Jun/1/g" | sed -e "s/Nov/11/g" | sed -e "s/://g" | awk '{print $1$2$3}'

これらをwhileでまわしてどう比較させるのか、まったくわからん・・

319 :login:Penguin:2006/12/03(日) 14:14:55 ID:73paMa8k
>>312と違うじゃねーか

320 :login:Penguin:2006/12/03(日) 14:16:41 ID:73paMa8k
ああ現在の記録の方か

321 :login:Penguin:2006/12/03(日) 14:28:51 ID:0bKgPd66
質問です。

a.aaaa.aaaa.aaaa.a
b.b
cccccc.c.c.cc.ccccc

のような内容のファイルがありまして、最後の.から右側だけを取り出したいのですが、
sedだとどうやるんでしょうか。

$ sed -e '/^(.*)\.(.*)/\2'

のようなやり方だと、後方参照の数字が分からないで困ってます。


322 :login:Penguin:2006/12/03(日) 15:45:30 ID:Wi7dHq2/
\.([^\.]+)$

323 :login:Penguin:2006/12/03(日) 16:23:52 ID:/7urMGDU
それ何てAA?

324 :login:Penguin:2006/12/03(日) 16:24:47 ID:Wi7dHq2/
\.([^\.]+)$ プギャー

325 :login:Penguin:2006/12/03(日) 17:48:15 ID:/7urMGDU
>>324
ご本人殿、馬鹿に付き合ってくれてありがとう

326 :321:2006/12/03(日) 17:50:37 ID:0bKgPd66
>322
ありがとうございます。

しかし、

$ cat list | sed -e 's/\.\([^\.]+\)$/\1/'
a.aaaa.aaaa.aaaa.a
b.b
cccccc.c.c.cc.ccccc

となってしまいます。何故だろう。

327 :login:Penguin:2006/12/03(日) 17:56:48 ID:Wi7dHq2/
>>326
括弧をエスケープしている理由は?

328 :login:Penguin:2006/12/03(日) 17:59:35 ID:73paMa8k
sed 's/^.*\.//g'

329 :login:Penguin:2006/12/03(日) 18:00:43 ID:73paMa8k
あgいらんわ

330 :login:Penguin:2006/12/03(日) 18:24:02 ID:wqiGXln8
foreach line (`cat file`)
foreach> echo $line:e
foreach> end

とかいう技がある。csh/zsh だけどね。

331 :login:Penguin:2006/12/03(日) 23:38:29 ID:tvcBgjra
IFS=.
while read line
do
set set ${line}
eval "echo \"\$$#\""
done

POSIX な sh なら動くと思われ。
取り敢えず、ash/ksh/bash それと emulate sh/emulate ksh な zsh では確認。


332 :login:Penguin:2006/12/04(月) 16:05:09 ID:+d1incKQ
cut -d\. -f2- list
が最短?

333 :login:Penguin:2006/12/04(月) 17:04:06 ID:CaDaOOn9
>>332
課題を勘違いしているんじゃない?
ピリオドの個数は不定。おれなら
>>328だな。



334 :321:2006/12/04(月) 17:16:11 ID:IolELO07
>328
すげー。ありがとう。

335 :login:Penguin:2006/12/05(火) 17:59:40 ID:IE2lurje
>>333
> ピリオドの個数は不定。
だから -f 2- なんだと思うが


336 :login:Penguin:2006/12/05(火) 18:03:00 ID:IE2lurje
あ、ごめん「最後の.から」か

337 :login:Penguin:2006/12/05(火) 19:48:57 ID:W6tEWDj4
rev | cut -d. -f1 かな。


338 :login:Penguin:2006/12/05(火) 23:19:56 ID:wgUuRSHI
いろいろ覚えるの面倒だからなんでもawkでやってしまう。
jgawk -F. "{print $NF}"


339 :login:Penguin:2006/12/06(水) 00:12:40 ID:CvZE1xbv
\.([^\.]+)$ プギャー


340 :login:Penguin:2006/12/06(水) 11:42:56 ID:F61ky2gC
>>339
うわっ、勉強になる。

341 :login:Penguin:2006/12/08(金) 21:51:15 ID:OUKkAuJR
カレントディレクトリにあるflvをflv2mpeg4を使ってaviに変換するために
以下のようなスクリプトを書いています。
#!/bin/sh
for file in `ls`
do
case "$file" in
*.flv)
flv2mpeg4 $file `echo $file|sed -e "s/\.flv$//"`.avi
;;
esac
done

しかし、flvのファイル名にスペースがあると(cat vs dog.flvみたいな)
dog.flvというファイルを変換しようといてしまいます。空白を含むファイル名
も正常に変換するにはどのように書けばよいのでしょうか?
初歩的な質問かと思いますが宜しくお願いします。

342 :login:Penguin:2006/12/08(金) 22:45:09 ID:K296GRSh
てか、なんでcase "$file"と自分からquoteしておきながら、
flv2mpeg4 $fileの方はquoteせんのんのん?不思議や。

343 :login:Penguin:2006/12/08(金) 23:15:36 ID:0k4TWnD+
>>341
for file in *.flv
do
flv2mpeg4 "$file" `basename "$file" .flv`.avi
done

344 :login:Penguin:2006/12/08(金) 23:56:18 ID:ssJkS4Av
>>343
`…` もクオートせんと、単語分割されるかと。
"$(…)" を使うか、可搬性をあげたいなら
basename=`…` と、一旦変数に格納するか。

ま、俺だったら
for file in *.flv
do
flv2mpeg4 "$file" "${file%.flv}.avi"
done
だな。


345 :341:2006/12/09(土) 00:39:41 ID:1jyOluzm
うほっ出来ました。
目的のことよりもたくさんの知らないノウハウを得ることが出来ました。
皆さん本当にありがとうございました。

346 :login:Penguin:2006/12/10(日) 00:18:58 ID:Mc1jnefY
画像とかで名前だけ違って中身が同じファイルがあることがよくあるので
ファイルのサイズが同じファイルがあれば表示するようなのを
つくろうと思っているんですが、可能ですよね?

347 :login:Penguin:2006/12/10(日) 00:23:09 ID:UGTkob0M
>>346
ls -lなりstatなりでサイズを取得しつつ、
sort (適当なフィールド) |uniq -d とかすればいいんじゃね。

サイズ同じで実は違うファイルって言うレアケースも、
md5とかのハッシュ使えば判別できるだろ。

348 :login:Penguin:2006/12/10(日) 00:45:09 ID:Mc1jnefY
>>347
サイズをうまいこと受け取ることができるか不安ですが
ありがとうございます。やっぱりできそうですね。

重複を自動で消すのもかんがえましたが手違いがあったら恐いので
サムネイルでも確認しながら手動で消すことにします。

349 :login:Penguin:2006/12/10(日) 06:51:16 ID:MWK4NznI
>>348
サムネイルで確認すると言うことは画像ビューアを使うと言うことだよね?
それなら、重複画像検索機能つきの画像ビューアを使った方がはやいかも。
重複画像判定アルゴリズムを再発明する必要はないと思う。

350 :login:Penguin:2006/12/10(日) 07:04:36 ID:b4TTam1n
cmp では何か問題ある?

351 :login:Penguin:2006/12/10(日) 07:21:30 ID:MWK4NznI
>>350
>>346に書いているだけの内容ならcmpで十分だと思うけど、Exifを削除しただけで
同じ画像にもかかわらず違うファイルと判定されるので、>>346はすぐに限界に気が
つくと思う。

352 :login:Penguin:2006/12/10(日) 19:07:23 ID:PO4Qw5VE
>>346
つ findimagedupes


353 :login:Penguin:2006/12/11(月) 13:41:55 ID:lI3TknAe
>>352
おぉぉぉ、これは便利そうな。
精度と速度のバランスがどれくらいか分からないけど、Shellスクリプトから使える
のは何よりもありがたい。

354 :login:Penguin:2006/12/12(火) 00:25:50 ID:as9nLGl7
>>353
md5sum位取ったほうがいいと思う。

355 :login:Penguin:2006/12/12(火) 17:31:57 ID:o5CvLJw/
「夜23時からから朝の7時以外ならcommand実行」
というスクリプトを書きたいのですが、いい方法ないでしょうか?


356 :login:Penguin:2006/12/12(火) 17:34:12 ID:RcAGTw46
>>355
`date +%H` を比較。

357 :login:Penguin:2006/12/12(火) 18:50:49 ID:RHWRLnjb
>>349 >>351
わかりました。
そのような既存のソフトは結構あるようなので
そういうのを使います。

358 :login:Penguin:2006/12/12(火) 20:23:22 ID:IQmW0Qdp
>>355

 #!/bin/sh
 test `date +%H -d '+ 1 hour'` -gt 8 || exit
 ...



359 :login:Penguin:2006/12/12(火) 20:24:26 ID:IQmW0Qdp
>>358 はウソ。あまり考えずに書いてしまった。スマソ

360 :355:2006/12/13(水) 00:12:01 ID:0m8saZaP
>356
>358
ありがとう。

>359
参考になりますよ

361 :login:Penguin:2006/12/13(水) 00:28:02 ID:wD1iJX11
あるディレクトリにファイルが沢山入っていて、
更新時間が早いファイル順に並べて(ls -t)、そのうちの上から20%のみを移動させたい
のですが、いい方法はないでしょうか?

それt、lsって絶対パスでファイル名を表示させるオプションはないでしょうか?



362 :login:Penguin:2006/12/13(水) 00:37:26 ID:HWFZg9B3
>>361
for i in `find .`;do `pwd`/$i;done

363 :login:Penguin:2006/12/13(水) 00:43:43 ID:+9i4LQPP
>>362
なんで全ファイルを実行してるのかよくわからんが
素直に find `pwd` でよくね?

364 :login:Penguin:2006/12/13(水) 00:59:38 ID:oKdbScyz
>>355
case文使うとすっきりと書けるかも。まぁ、書き方次第だけど。
ttp://www.tsden.org/takamiti/shText/shText040.html#H445

>3 の 参考リンクに入ってないのね。
Bourne Shell 自習テキスト
ttp://www.tsden.org/takamiti/shText/shText.html

>>361
> 上から20%
ls -t | head -n $((`ls -1 |wc -l`*20/100))

> 絶対パスでファイル名を表示させる
ls じゃないけど。
alias fullpath='find "$PWD" -maxdepth 1 -iname '
とか。

365 :login:Penguin:2006/12/13(水) 01:28:13 ID:2eV8BPJU
>>384
「Bourne Shell 自習テキスト」は、リダイレクトのところが誤解を与える説明になっている。
というか、間違っている。

366 :361:2006/12/13(水) 13:04:20 ID:9APFlcGm
ありがとう


367 :login:Penguin:2006/12/14(木) 00:30:25 ID:QtGEecw2
ディレクトリに多くのファイルが入っていて、とある日付より前のファイル、
例えば「最終修正時刻が2006年12月01日より以前のだけを抜き出す(表示)」
ということをしたいのですが、シェルスクリプトで何とかならないでしょうか?


368 :login:Penguin:2006/12/14(木) 00:57:03 ID:QOHqlL4t
touch -t 200612010000 /tmp/hoge.$$ && find /dir \! -newer /tmp/hoge.$$ && rm /tmp/hoge.$$


369 :login:Penguin:2006/12/16(土) 19:09:54 ID:bwKTijT0
>>367
こんなのみつけた
ttp://d.hatena.ne.jp/bonlife/20061130/1164879026

つーか、もれも今日の日付-1日をcp rm したいww


370 :login:Penguin:2006/12/16(土) 19:35:09 ID:bwKTijT0
date --date '1 day ago' +%Y%m%d

なんだよ!あるんじゃん!計算しそうになったよウワァァァァァァヽ(`Д´)ノァァァァァァン!

371 :login:Penguin:2006/12/17(日) 00:03:59 ID:XYESYa/3
GNU date は超便利。
man をじっくり読んでみることを勧める。

ttp://www.linux.or.jp/JM/html/GNU_sh-utils/man1/date.1.html

372 :login:Penguin:2006/12/17(日) 15:45:21 ID:waTrWC3J
【やりたい事】
2ちゃんねる過去ログの任意のレス番カキコを手動あぼーんしたい。

【やりかけている解決法】
2ちゃんねるログは1行1レスの書式なので、まずあぼーんしたいレス番をファイルdeathnoteに
書き連ね、それを読み込んで指定行ごとに置き換え処理をするスクリプトabonerを作る。

ファイルAの中身(例:
1
3
5
---------------------------------

スクリプトabonerの中身:
#!/bin/bash
INS="deleted<> <> <> <>"
for i in `cat $1`
do
sed -i.bak -e "${i}s:rst:${INS}:" $2
done
----------------------------------

$ ./aboner deathnote xxx.dat
これで一応望みの結果は得られるのだが、どうもスマートじゃない。
実際処理時間は、300kB程度の1000到達ログの400件あぼーん処理を
Athlon3000+で約10秒。
sed以外(awk,perl)は使えません。
forで毎度sedを呼び出さず、sed一度で済む方法があれば教えてください。


373 :login:Penguin:2006/12/17(日) 16:02:41 ID:ma/9yUXs
sed 's/$/s:rst:deleted<> <> <> <>:/' dethnote | sed -f- xxx.dat

rst って文字列を置換してるようなのでそうしてるけど、rst って何だ?


374 :372:2006/12/17(日) 16:37:55 ID:waTrWC3J
>>373
即レス感謝です。
すいません。rstはテスト用の適当な文字列で無意味です。


一行で出来るとは素晴らしい。処理の負荷も格段に減らせそうです。
提示していただいた式をヒントに、自分の目的を完全に満たすように更に詰めて。
後でまた報告します。

重ねてありがとうございました!

375 :login:Penguin:2006/12/17(日) 19:07:29 ID:kFxhwkRU
OS X のdateは、GNU date じゃないので注意....

自分で作ったものだとPerl で timelocal 使って計算しているな〜

376 :login:Penguin:2006/12/17(日) 19:22:38 ID:BBDLOkoZ
この板で他の OS の話持ち出されても。

377 :login:Penguin:2006/12/17(日) 19:56:17 ID:+OjoWrzp
>>375のようないかにもLinuxしか知りませんてのはこの板だから許されるんだから
おおめに見てやろうや。

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

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

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