[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 21:40 / Filesize : 275 KB / Number-of Response : 969
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part3



1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

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

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

【sed】シェルスクリプト総合@LINUX Part2【awk】
pc11.2ch.net/test/read.cgi/linux/1154578200/
pc8.2ch.net/test/read.cgi/linux/1121994321/

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


768 名前:login:Penguin mailto:sage [2008/03/03(月) 23:43:14 ID:Zrc2Vdg0]
それはanalogとかでできないものでしょうか(´-`)

769 名前:login:Penguin mailto:sage [2008/03/03(月) 23:46:01 ID:5ghxiELA]
>>768
実はそんな気がしてた
ありがとう('`)〜♪

770 名前:login:Penguin mailto:sage [2008/03/04(火) 00:34:34 ID:61UoHuE3]
ウワー早い
2分ちょいでこれだけ解析できるのかー
ああでも肝心なRefererランキングが出てないわ
Analogスレは4ヶ月近く誰も居ないみたいだしドウシタモンダカー

771 名前:login:Penguin [2008/03/04(火) 09:48:48 ID:kUaxbjJj]
Bashを使ってシェルスクリプトの練習をしています
ファイルに特定の文字列が記載されていたら処理を分岐させるというシェルを書きたいと思っているのですがなかなか上手くいってくれません
何かいい方法がありましたら教えていただけないでしょうか

やりたい事はファイル内にHTMLという文字列が入っていたらAの処理 入っていなかったらデフォルトの処理をしたいと考えたので
下記のようにしてみました

TMP=`cat $YEAR$MONTH$DAY.csv |grep HTML`;
echo $TMP
case "$TMP" in
HTML)echo "HTML file"
;;
*) echo "##################"
esac



772 名前:login:Penguin mailto:sage [2008/03/04(火) 09:54:01 ID:oWYbuV9h]
>>771
if grep HTML "$YEAR$MONTH$DAY.csv" >/dev/null; then
echo "HTML file"
else
echo "##################"
fi

773 名前:login:Penguin mailto:sage [2008/03/04(火) 14:33:52 ID:kUaxbjJj]
>>772
ありがとうございます
教えていただいた通りにやったら問題なくできました

なぜcat|grepのときは上手くできなくて
grepの時は問題なくできるのかがちょっと分からないのですが
いろいろ調べてみようと思います




774 名前:login:Penguin mailto:sage [2008/03/04(火) 21:04:44 ID:rsD9V5Zj]
HTML) を *HTML*) としてみようぜ。



775 名前:login:Penguin mailto:sage [2008/03/04(火) 23:06:20 ID:VrfR3qUe]
>>774
やだよ

776 名前:login:Penguin mailto:sage [2008/03/05(水) 00:05:43 ID:EV9xTscM]
grep -q を使わないのはポータビリティー重視だから?



777 名前:かね ◆CHAS.7AvVo mailto:sage [2008/03/05(水) 10:22:08 ID:JQ4a1dor BE:411629928-2BP(158)]
>>777ゲット

778 名前:login:Penguin mailto:sage [2008/03/10(月) 18:08:47 ID:qsIz6iXz]
論文を書くときに使うグラフをTopazというソフトを用いて作成しております。
その結果、グラフがepsファイルとして作成されるのですが、Windowsにもってくるとフォント関係でエラーが生じてしまいます。
なのでLinuxでフォントをアウトライン化しようと思い「eps2eps」というコマンド(シェルスクリプト?)を用いて
epsファイルのフォントをアウトライン化しました。
しかし、そうするとbounding boxがおかしくなってしまいます。
ですので元のepsをテキストエディタで開き、bounding boxの項目をコピペして対応しています。



それでようやく本題なんですがw
上のような作業を、複数のファイルに対して一括で行いたいのです。

for file in *.eps
do
eps2eps $file ${file%eps}2
done

のようなシェルスクリプトを使えば一括でアウトライン化epsができると思うのですが
さらに、インプットファイルをテキストエディタで開きbounding boxの項目をコピー
アウトプットファイルにbounding boxの項目を貼り付け
というような機能を持たせることはできるのでしょうか?

779 名前:login:Penguin mailto:sage [2008/03/10(月) 19:47:47 ID:PtxOKuxD]
ed

780 名前:login:Penguin mailto:sage [2008/03/11(火) 02:26:04 ID:3Mwu+R1S]
>>778
スクリプトに慣れた人ならすぐに作れる。

781 名前:login:Penguin mailto:sage [2008/03/12(水) 23:51:51 ID:wAPdko8t]
>>780


782 名前:login:Penguin mailto:sage [2008/03/13(木) 22:58:09 ID:A7XLS93G]
>>781


783 名前:login:Penguin mailto:sage [2008/03/13(木) 23:17:56 ID:SoJCaJfU]
ああ、無情

784 名前:login:Penguin mailto:sage [2008/03/14(金) 00:22:41 ID:XhBWUHl1]
シログミガンバレ

785 名前:login:Penguin mailto:sage [2008/03/18(火) 03:16:13 ID:TPZ/j5Uw]
basenameが第二引数を取ることを今知った。

786 名前:login:Penguin mailto:sage [2008/03/20(木) 22:15:42 ID:N/tKbDY7]
echo hoge=1で代入、表示両方できる知った件



787 名前:login:Penguin mailto:sage [2008/03/21(金) 00:14:20 ID:jeNVffRp]
>>786
$ echo hoge=1
hoge=1
$ echo x"$hoge"x
xx

bash 2.05b@debian ではできないぞ。
環境を教えてくれ。

788 名前:login:Penguin mailto:sage [2008/03/21(金) 01:11:50 ID:3ULYcj2H]
そんなのできたら困る。

789 名前:login:Penguin [2008/03/21(金) 01:53:30 ID:Mk2nPfge]
>>539
>>537 最近はGUIの環境もシェルと呼んだりするらしいしね.
>ところで,シェルスクリプトをシェルと略す感覚が信じられない
>.せめてスクリプトのほうを残すべきじゃないのか,意味的に…

javascriptをjavaって呼ぶ奴おおいし、むきになんなよ
ちっせーな、何度も何度も

790 名前:login:Penguin mailto:sage [2008/03/21(金) 03:00:16 ID:tzWxNirH]
>>789
javascriptとjavaだって別物じゃねーか
まったく別の意味にとられる表現は避けるべきだろ。

791 名前:login:Penguin mailto:sage [2008/03/21(金) 03:26:20 ID:yp4cACqr]
javaの開発と言われて行ってみたら、javascriptの案件だった……

経験者を求めていた筈なので確認をとったら速攻で別案件に回されたけど。
(だれがどこでまちがったのかはしらない。たぶん、えいぎょうのアレがマタやらかしたんだろうけど)

792 名前:login:Penguin mailto:sage [2008/03/21(金) 18:28:30 ID:dmCthI0s]
>>789
無能丸出しだな。

793 名前:login:Penguin mailto:sage [2008/03/22(土) 00:13:19 ID:/5OR7tiw]
そうだよね、文字の"あ"を"い"って発音してもいいじゃん?

794 名前:login:Penguin mailto:sage [2008/03/22(土) 06:15:29 ID:EkMxwp6R]
>>792
頭の構造が粗雑なんだろうね。
しかし無能とは決めつけられないよ。土方としては有能かも知れないじゃないか。

795 名前:login:Penguin mailto:sage [2008/03/22(土) 13:14:51 ID:I+OQFn9y]
>>794
井の中の蛙、大海を知らず。

796 名前:login:Penguin mailto:sage [2008/03/22(土) 14:00:07 ID:4xBJlBA7]
javascriptをjavaと呼ぶ井戸の外の世界



797 名前:login:Penguin mailto:sage [2008/03/22(土) 14:23:40 ID:79XeAASw]
もうすべて「あれ」と「あれ以外の何か」でいいんじゃね?

「この開発にはあれが必要だな」
「そうですね、あれも必要です」
「あれのほうはどうだ」
「あれはあれ以外のあれでやりましょう」
「あれはあれだったからな」

募集要件にはエスパー希望と書けば何も問題ない。

798 名前:login:Penguin mailto:sage [2008/03/22(土) 14:25:08 ID:ldkQa/0V]
残念なことにハードディスクドライブをハードと略すおっさんを結構見かけるのがリアル世の中なのねん。
javascriptをjavaと呼んじゃうおばちゃん、ねーちゃんだってざらにいるよ。
どっちかというと>>789のほが常識的な気がす

799 名前:login:Penguin mailto:sage [2008/03/22(土) 15:16:06 ID:OrPubXKD]
>>789
perlスクリプトをPerlと呼んだりPerlでやると言ったり
awkスクリプトをawkと読んだりawkでやると言ったり

それと同じでは

800 名前:login:Penguin mailto:sage [2008/03/22(土) 16:27:56 ID:5bvfNtQw]
省略したら同種の別の言葉になるかどうかだな。

801 名前:login:Penguin mailto:sage [2008/03/22(土) 16:38:49 ID:ldkQa/0V]
厳密なことをいえばさ、シェルって単体で言う場合はシェルスクリプトの略じゃないのよね。
(>>537,>>539はこれにつっこんでいる)

OSのカーネルに対する、(コマンド)インターフェイス外殻(カーネルの外層を覆う殻の概念)を
現在はCUI/GUIの別を問わずにシェルと呼んでる。このうちGUIの場合はグラフィカルシェルとか
CUIの場合はコマンドラインインタプリタとか呼ぶのだけど、このコマンドラインインタプリタを
Linuxを含めたUNIX系OSでは単にシェルと呼ぶ慣習がある。昔UNIXにはGUIなんて無かったらね、
シェルといったらコマンドラインインタプリタのことだ、ということに定着していたわけね。
いわゆるsh, bash, csh, tcshのshがシェルだ罠。

シェルスクリプトの略がシェルじゃなくて、シェルで動くスクリプトがシェルスクリプトなの。
順番が逆なのよ。
awk/perlもawk(言語)/perl(言語)のスクリプトがawk/perlスクリプトなのであって
awk/perlスクリプトの略がawk/perlなんじゃないよ。

まぁどうでもいいけどな。

以上を踏まえてあえて言えば
たしかにシェルとシェルスクリプトは別物だしjavaとjavascripは別物だし、
細かいこと言えばGUIだってグラフィカルシェルなのだ(>>539)が
あんま細かいことをいうとバカみたいだ。つーか狭量に見える。
というわけで>>789のほが同意できる。聞き上手って言葉があるじゃない?

802 名前:login:Penguin mailto:sage [2008/03/22(土) 17:33:00 ID:/5OR7tiw]
でだ、>>539がシェルスクリプトをシェルと略さずにせめてスクリプトと略しゃ
いいだけじゃねーかと建設的な提案をしたのに、他の軽量プログラミング言語
までもちだし、略した言葉を受け取った人間の能力の問題じゃね?
となるこのスレの流れに、思わず小岩井ミルクコーヒーを噴いた。

>>791の様に読解および対話能力が備わってないと、悲惨な状況のド真中に
パラシュート降下させられる奴がわんさかでそうだ。単語の略し方の問題で。

803 名前:login:Penguin mailto:sage [2008/03/22(土) 18:27:12 ID:g5kThUF3]
>たしかにシェルとシェルスクリプトは別物だしjavaとjavascripは別物だし、
>>800の言う通り、
シェル・スクリプトをシェルと呼んでも文脈から意味は通じるが、
javascriptをjavaと呼んでしまうと別のものを指してしまう。
混同するな。

804 名前:login:Penguin mailto:sage [2008/03/22(土) 19:12:09 ID://sUM775]
WikipediaをWiKiとかね。

805 名前:login:Penguin mailto:sage [2008/03/22(土) 19:20:26 ID:ldkQa/0V]
では、世の間違いをどこまでも正していってくれ。
思い浮かべて欲しい世の人々は道の傍らでJavaとJavascriptの違いを
切々と説く君たちに聖者が来れり、天国は来れりと歓喜することであろう。

が、まぁ少なくとも営業の彼と経理の彼女、はす向かいの鈴木さんに
今後一切飲みに誘われなくなるのは間違いと思うけどね。


806 名前:login:Penguin mailto:sage [2008/03/22(土) 19:26:48 ID://sUM775]
>>805 は啓蒙活動を自粛するようです。



807 名前:login:Penguin mailto:sage [2008/03/22(土) 19:39:22 ID:pZoAGsoS]
モヒカン族と村人ですから


808 名前:login:Penguin mailto:sage [2008/03/22(土) 19:39:41 ID:d90KTFFK]
>>805
さっさと氏ね

809 名前:login:Penguin mailto:sage [2008/03/22(土) 20:07:27 ID:/5OR7tiw]
>>805
AとBは異なるという説明し、その異なりを無視して同一のもととして扱うと
余計なコストが発生するから、次からはきちんと区別してくれという依頼が
出来ない風土、もしくは、意思決定にかかわる情報を扱うやつが説明しても、
その異なりを理解できないなら、そんな会社つぶれるだろ常考。

また、痛いレスみてJavaとJavascriptも区別して話す新入りが入ってきたら、
それこそ大迷惑だ。

>>791のえいぎょうのアレは赤っ恥ですめばいいけど。発注元からみると、
大丈夫かこの営業さんと思ったに違いない。

という燃料を補給してみた。

810 名前:login:Penguin mailto:sage [2008/03/22(土) 20:29:32 ID:ldkQa/0V]
まぁ派遣は大変だよな。ガンガレ。

811 名前:login:Penguin mailto:sage [2008/03/22(土) 21:23:56 ID:I+OQFn9y]
>>797
つまり春奈と偽春奈で仕事をすると。

812 名前:login:Penguin mailto:sage [2008/03/22(土) 21:25:26 ID:ldkQa/0V]
>>810だが、今見たら言い方が悪かった。なんだか煽っているようにもとれるかもな。
すまんかった。そういう意味じゃなくて、今時、派遣ぽい職場の人は技術職まで
そんな感じになってきて大変だと思う。漏れにも似たような経験あるからさ、
マジ、ガンがって欲しいと思ってる。
言われたのと行った先で条件が違うなんてのはちょくちょくあって
アホな会社にも言えなくて当人が泣きをみてしまうつーのは辛いよな。
やる気ならなんとかユニオンとかそっちに話をもってくしかないわけだが
自分の身を守るのが第一かと思うよ。
まぁここでそんなこと言っててもしょうがないわけで、そういう言い方になった。

813 名前:login:Penguin mailto:sage [2008/03/24(月) 00:53:04 ID:W0JgcRQd]
教えて先生。つーか、自分がやった時に苦労したんだけど、
プロな人はもっと簡単な方法を知ってるんじゃないかな的なお題。
ひょっとして歴代のスレで既出の可能性ありだけど許して。

ディレクトリに
お宝画像(1).jpg お宝画像(2).jpg .... お宝画像(100072).jpg お宝画像(100073).jpg
が入っている。ファイル名はutf8の日本語、連番はカッコ付きで
連番途中に欠番がある可能性がある。これらのファイルをすべて
ero-pic000001.jpg ero-pic000002.jpg .... ero-pic100072.jpg ero-pic100073.jpg
という風にリネームしたい。どうしたらいいでしょう?



814 名前:login:Penguin mailto:sage [2008/03/24(月) 01:03:25 ID:zratqhRJ]
プログラミングの基礎を学べば余裕でできると思うよ

815 名前:login:Penguin mailto:sage [2008/03/24(月) 01:09:16 ID:1V6v3lmW]
実は漏れは結局Cでやったんだけどね。シェルで簡単にやるにはどうするの?

816 名前:login:Penguin mailto:sage [2008/03/24(月) 01:11:56 ID:BAIAfq4T]
rename や mmv を使うかな。



817 名前:login:Penguin mailto:sage [2008/03/24(月) 01:16:04 ID:eiDHSNtl]
perl版renameで
rename '/\d+/ and $_=sprintf(q{ero-pic%06d.jpg}, $&);' お宝画像*.jpg
とか?

818 名前:login:Penguin mailto:sage [2008/03/24(月) 01:23:02 ID:RkCnK2Rz]
ls > file_list.txt して中身を
mv "お宝画像(1).jpg" "ero-pic00001.jpg" とかに変えて
sh file_list.txt
するかな

819 名前:login:Penguin mailto:sage [2008/03/24(月) 02:17:54 ID:QVIn50Y1]
>>816
mmvというのは? うちにはないみたいだけど。

>>817
perl版renameというのは普通のrenameとは違いますよね?多分。

>>818
基本的にはその方法を用いましたが、
> mv "お宝画像(1).jpg" "ero-pic00001.jpg" とかに変えて
ここがエディタでも番号を取り出す文字列操作を伴うマクロかなにかを使う必要があるわけです。
10000行以上あるので手動では無理ですし。私はCでやりましたが。

やっぱそもそも結構めんどくさいことだったんですかね。
なんか簡単そうな感じはするんだけど。

820 名前:login:Penguin mailto:sage [2008/03/24(月) 02:39:44 ID:sKYr6YWg]
Perl版renameといえばラクダ本に載っている正規表現でリネームパターンを
指定できるスクリプト(使い方は>>817)のこと。


821 名前:login:Penguin mailto:sage [2008/03/24(月) 02:44:18 ID:xdVA6Pwk]
>>820 導入するには?

822 名前:login:Penguin mailto:sage [2008/03/24(月) 02:50:59 ID:RkCnK2Rz]
>>819
でも、正規表現使ったら5回くらいの置換でいけるから、
それでやっちゃうなぁ。俺だったら
vi で
:%s/.*\(.[0-9]\).*/ero-pic0000\1.jpg/gc
:%s/.*\(.[0-9]{2}\).*/ero-pic000\1.jpg/gc
みたいな感じで
自信ないけど

823 名前:login:Penguin mailto:sage [2008/03/24(月) 02:56:32 ID:NZTM56J5]
>>822
> :%s/.*\(.[0-9]{2}\).*/ero-pic000\1.jpg/gc
これダメっぽいような?

あと「お宝動画」は例えばの例でどうかわかんないけど
日本語大丈夫かしら?


824 名前:login:Penguin mailto:sage [2008/03/24(月) 02:57:54 ID:BAIAfq4T]
perl-rename のGTK版見付けた。
gprename

しかしprel-renameみつからない・・・

825 名前:login:Penguin mailto:sage [2008/03/24(月) 03:00:27 ID:BAIAfq4T]
って ubuntu のrenameはprenameだった。

826 名前:login:Penguin mailto:sage [2008/03/24(月) 03:07:10 ID:NZTM56J5]
>>824

さんきゅ。これ?
https://sourceforge.net/project/showfiles.php?group_id=40094&package_id=32230

あとひょっとしてPerl版renameって

$ perl -e '{ rename "old-filename", "new-filename";}'

みたいな話なのだろうか?(↑はちゃんと動くようだけど)



827 名前:login:Penguin mailto:sage [2008/03/24(月) 03:08:54 ID:eiDHSNtl]
debianのperlのパッケージに標準で含まれてるのよ

828 名前:login:Penguin mailto:sage [2008/03/24(月) 03:17:40 ID:/I27eUR4]
今思いついたのだが、ひょっとしてスクリプトで

#!/usr/bin/perl
rename old-filename, new-filename;

みたいな話とか?なるほどそれならいけそだけど。


829 名前:login:Penguin mailto:sage [2008/03/24(月) 03:20:03 ID:sKYr6YWg]
Perl版renameはこんな感じのスクリプト

$op = shift;
foreach (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was, $_) unless $was eq $_;
}


830 名前:login:Penguin mailto:sage [2008/03/24(月) 04:12:10 ID:dtyI9N0m]
>>813
あえてシェルスクリプトで書くのならこんな感じかな。

#! /bin/bash
for file in "$@" ; do
 num=${file#*(}
 num=$( printf '%06d' "${num%)*}" )
 mv "$file" "ero-pic${num}.jpg"
done

bashism が嫌いなら sed に置き換えれば
/bin/sh でも動くんじゃないかな


831 名前:login:Penguin mailto:sage [2008/03/24(月) 06:30:29 ID:bi7lOxG6]
zshだが許せ。

for n in {1..100073}; mv お宝画像($n).jpg ero-pic`printf %06d $n`.jpg

832 名前:login:Penguin mailto:sage [2008/03/24(月) 10:57:24 ID:62iD1Dht]
>>817 >>820 >>827 >>829
>>826=>>828だけど、ええとそれってシェルスクリプトで使えるの?
/usr/bin/rename が置き換えられているとか?
どうなっているんだろう。

>>830
うちでは動かないようだ。

日本語が混じるとためかな。あとかっことか。

で結局こうやったのだけど。
$ls | sed s/.*\(//g | sed s/\).*//g | awk '{printf("mv \"お宝動画(%d).jpg\" \"ero-pic%06d.jpg\"\n",$1,$1)}' | sh

前やったときはawkの代わりにcのプログラムでやってた。まぁawkでも同じか。

833 名前:login:Penguin mailto:sage [2008/03/24(月) 10:57:58 ID:62iD1Dht]
>>831
zshって便利そうだね。

834 名前:login:Penguin mailto:sage [2008/03/24(月) 22:35:08 ID:7MP5JU0g]
>>813
いろんなやり方があるけど、スクリプト内でいきなりmvなりrenameして
失敗すると悲劇なので、

mv "旧いお宝画像1.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像2.jpg" "新しいお宝画像2.jpg"
mv "旧いお宝画像3.jpg" "新しいお宝画像3.jpg"
mv "旧いお宝画像4.jpg" "新しいお宝画像4.jpg"
mv "旧いお宝画像5.jpg" "新しいお宝画像5.jpg"
mv "旧いお宝画像6.jpg" "新しいお宝画像6.jpg"
(以下略)

みたいに一旦テキストに落として、それざっと眺めてからshで流しなおしたほうが良いよ。
以前、

mv "旧いお宝画像1.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像2.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像3.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像4.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像5.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像6.jpg" "新しいお宝画像1.jpg"
(中略)
mv "旧いお宝画像1000.jpg" "新しいお宝画像1.jpg"

ってやっちゃった(´・ω・`)

835 名前:login:Penguin mailto:sage [2008/03/24(月) 23:31:47 ID:If29/JKD]
>>798
なんて頭の悪い…


836 名前:login:Penguin mailto:sage [2008/03/24(月) 23:35:42 ID:If29/JKD]
>>819
> perl版renameというのは普通のrenameとは違いますよね?多分。

renameがperl版renameじゃないUNIX類って具体的には何があります?
UNIX類じゃないけど、VMSはそうでした。



837 名前:login:Penguin mailto:sage [2008/03/25(火) 00:24:28 ID:FMsixLid]
>>832
> 日本語が混じるとためかな。あとかっことか。

括弧の方だな。すまん。クォートするなりしてやってくれ。

838 名前:login:Penguin mailto:sage [2008/03/25(火) 00:44:35 ID:Mm1m5DLO]
>>836
$ whereis rename
rename: /usr/bin/rename
$ less /usr/bin/rename
"/usr/bin/rename" may be a binary file. See it anyway?

多分debianが変わり者では?


839 名前:login:Penguin mailto:sage [2008/03/25(火) 00:50:23 ID:6V9ksjI9]
>>836
util-linux に入ってるよ。

840 名前:login:Penguin mailto:sage [2008/03/25(火) 00:56:57 ID:ukA1etix]
そういやDebianはprenameとかいう名前になってんだっけね?
古典的なLinuxはこのrenameなのかな。

/*
* rename.c - aeb 2000-01-01
*
--------------------------------------------------------------
#!/bin/sh
if [ $# -le 2 ]; then echo call: rename from to files; exit; fi
FROM="$1"
TO="$2"
shift
shift
for i in $@; do N=`echo "$i" | sed "s/$FROM/$TO/g"`; mv "$i" "$N"; done
--------------------------------------------------------------
* This shell script will do renames of files, but may fail
* in cases involving special characters. Here a C version.
*/


841 名前:login:Penguin mailto:sage [2008/03/25(火) 01:44:34 ID:Mm1m5DLO]
>>840
古典的なLinuxというより一般的な普通のLinuxはそうだろうな。
Here C Version.のほうな。

d.hatena.ne.jp/takunama/20061123/rename
d.hatena.ne.jp/moriyoshi/searchdiary?word=*%5Bdebian%5D

debianのrenameは/usr/bin/prenameへのリンクで
prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト
つーのが真相らしい。perl版renameはdebianの方言つーことだわな。困ったもんだね。

842 名前:login:Penguin mailto:sage [2008/03/25(火) 01:51:01 ID:uIxNik7B]
それ自身はポータブルなPerlスクリプトだから
もし使いたかったら$HOME/binあたりに突っ込めばいいんじゃない

843 名前:login:Penguin mailto:sage [2008/03/25(火) 02:00:22 ID:+i6zdHek]
>>813
ls -1 ero_dir | sort | ruby -nle 'printf "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh

844 名前:login:Penguin mailto:sage [2008/03/25(火) 02:03:33 ID:+i6zdHek]
訂正orz

ls -1 ero_dir | ruby -nle 'print "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh

845 名前:login:Penguin mailto:sage [2008/03/25(火) 02:05:27 ID:6V9ksjI9]
>>841
> prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト
↓だってさ。
# This script was developed by Robin Barker (Robin.Barker@npl.co.uk),
# from Larry Wall's original script eg/rename from the perl source.

846 名前:login:Penguin mailto:sage [2008/03/25(火) 03:45:05 ID:mfggD9uB]
ラクダ本のだってのはだいぶ上の方で言及されとるがな。




847 名前:login:Penguin mailto:sage [2008/03/25(火) 06:52:15 ID:Mm1m5DLO]
>>845
prenameは Debian のパッケージメンテナが独自に
「the perl source(perlのオルジナルセット、いわゆるラクダ本)」から
パッケージ生成時に追加したスクリプト、つーことですね。

/usr/bin/renameがC版の代わりにこれで置き換えて拡張してあるのが
debianの方言ということで。

実はラクダ本のやつは見たことがあるな。

848 名前:login:Penguin mailto:sage [2008/03/25(火) 17:01:59 ID:7L4Qk+Sn]
>>840にある元のシェルスクリプトはsed版正規表現を理解する
・Here a C versionは正規表現を全く理解しない
・perl版はperl版正規表現を理解する
というわけでLinuxでも三種類あるんですね。


849 名前:login:Penguin mailto:sage [2008/03/25(火) 17:59:25 ID:Mm1m5DLO]
こういう微妙な違いってひょっとするとトリごとに結構あるのかもしれないね。
スレからはずれるけど、apache/httpdのコンフィグがバージョン系列は
一緒なのにDebian系(ubuntuも)とRH系(RedHat/Fedora/CentOS)で
まるっきり違ってて面くらったことがある。

850 名前:login:Penguin mailto:sage [2008/03/25(火) 18:02:21 ID:IQ4Jbr/0]
コマンドなんかもちょっと違うくらいだから、設定ファイルの書き方なんて違っていて当たり前。


851 名前:login:Penguin mailto:sage [2008/03/26(水) 21:17:50 ID:B6BxqxUi]
ツリー表示について

find / -type d|sort|sed -ne'1b;s/[^\/]*\//┗━━/g;s/┗━━┗━━/┃ ┗━━/g;
s/┗━━┗━━/┃ ┗━━/g;
s/┗━━┃/┃ ┃/g;p'

これだと下記のような表示になるのですが
┗━━proc
┃ ┗━━1
┃ ┃ ┗━━attr
┃ ┃ ┗━━fd
┃ ┃ ┗━━task
┃ ┃ ┃ ┗━━1
┃ ┃ ┃ ┃ ┗━━attr
┃ ┃ ┃ ┃ ┗━━fd
┃ ┗━━1106
┃ ┃ ┗━━attr

不要な線を無くして見栄えを良くしたいのですが、何か良い方法はありませんでしょうか
┗━━proc
┃ ┗━━1
┃ ┃ ┗━━attr
┃ ┃ ┗━━fd
┃ ┃ ┗━━task
┃ ┃ ┗━━1
┃ ┃ ┗━━attr
┃ ┃ ┗━━fd
┃ ┗━━1106
┃ ┃ ┗━━attr

852 名前:login:Penguin mailto:sage [2008/03/26(水) 21:52:30 ID:f9ufLLgD]
よくわからんけど tree -dA じゃダメなの?

853 名前:851 mailto:sage [2008/03/26(水) 22:04:51 ID:B6BxqxUi]
そういうコマンドがあるのは知ってるのですが

# which tree
/usr/bin/which: no tree

残念なことに入ってないんです。
いろいろ調べまわった結果がこれなんです。
もう少し自分でも調べてきます。

854 名前:login:Penguin mailto:sage [2008/03/26(水) 22:31:33 ID:f9ufLLgD]
そうかtreeのないトリもあるのか。

855 名前:login:Penguin mailto:sage [2008/03/26(水) 23:21:22 ID:5Znd97qm]
yumとかaptで入れられないっけ?

856 名前:login:Penguin mailto:sage [2008/03/27(木) 00:04:09 ID:ZXE2f6WU]
>>853
PATH が通ってないだけとか。locate 辺りで調べてみたら?
他に何かあったっけ>探す方法



857 名前:851 mailto:sage [2008/03/27(木) 00:35:50 ID:yDbPGpUf]
なんとか自己解決できました
下記のシェルスクリプトを「/usr/bin/tree」に置いて代用することにしました。

#!/usr/bin/perl
use strict;
my($top)=$ARGV[0];
if($top eq ""){ $top="."; }
print "[$top]\n";
&tree("",<$top/*>);
sub tree
{
my($bar,@dir)=@_;
for my $i(0..$#dir){
my($bl1)=($i<$#dir)?"┣":"┗";
my($bl2)=($i<$#dir)?"┃":" ";
my(@path)=split(/\//,$dir[$i]);
if(-d $dir[$i]){
print "$bar $bl1 [$path[$#path]]\n";
tree("$bar $bl2",<$dir[$i]/*>);
}else{
print "$bar $bl1 $path[$#path]\n";
}
}
}


ちょっと中身を理解するのは難しいですけど、使いこなせたらperlも結構便利そうですね。

858 名前:login:Penguin mailto:sage [2008/03/27(木) 01:47:43 ID:nVTK+35Z]
>>857
> 下記のシェルスクリプト

ちょっとマテ

859 名前:login:Penguin mailto:sage [2008/03/27(木) 04:19:25 ID:LOwKjqa0]
どう見てもシェルスクリプトでなくPerlスクリプトだなw
ちなみに、鳥は何なの?

860 名前:851 mailto:sage [2008/03/27(木) 19:23:00 ID:yDbPGpUf]
あ、確かにperlスクリプトですねw
ちなみに鳥はCentOS4.6で、サーバー構築の勉強用で使ってます。
最小構成でインストールしたからtreeコマンドが入って無かったのかもしれないです。

861 名前:login:Penguin mailto:sage [2008/03/27(木) 19:43:49 ID:ysMS9Gn7]
美女の現われるスクリプトを教えて下さい。

862 名前:login:Penguin mailto:sage [2008/03/27(木) 19:56:21 ID:ORW3s1IJ]
>>861
emerge beautiful_girl

863 名前:login:Penguin mailto:sage [2008/03/27(木) 23:51:02 ID:QsCLAAyg]
>>851-857
pstreeだと思うんだ・・

864 名前:login:Penguin mailto:sage [2008/03/28(金) 00:18:06 ID:jk3nWqNP]
>>863 find / だけど?

865 名前:login:Penguin mailto:sage [2008/03/28(金) 00:18:55 ID:deyesKz0]
>>864
そだったw

866 名前:789 [2008/03/28(金) 01:42:56 ID:QgSpL7VJ]
にやにや

もりあがってんじゃねーかw




867 名前:login:Penguin mailto:sage [2008/03/28(金) 01:46:42 ID:deyesKz0]
>>866
javascriptをjavaと呼ぶひと、こんばんはw

868 名前:login:Penguin mailto:sage [2008/03/28(金) 14:06:32 ID:Z7X2dF3N]
cshで質問です。
下記のように変数をperlに渡したいんですが、変数を認識してくれません。
どうすれば良いですか?

set hoge = funi
perl -pe 'print $hoge' file



869 名前:login:Penguin mailto:sage [2008/03/28(金) 15:16:41 ID:KjmTtujq]
>>868
シングルクォートをダブルクォートに変える

870 名前:login:Penguin mailto:sage [2008/03/28(金) 15:47:45 ID:Z7X2dF3N]
>>869
ありがとうございます。
試してみましたが、ダメのようです。

setenvで与えると上手く行きましたが、setで出来る方法も知りたいです。

871 名前:login:Penguin mailto:sage [2008/03/28(金) 16:04:18 ID:UFHtgKJC]
無理。

あえてやるなら
perl -e 'print "'"$hoge"'"'

これはperlに print "funi" という式を渡したに等しい。

872 名前:login:Penguin mailto:sage [2008/03/28(金) 17:22:58 ID:Z7X2dF3N]
>>871
ありがとうございます。
やってみたら出来ました。
意味は分かんないのでこれから調べてみようと思います。

873 名前:login:Penguin mailto:sage [2008/03/28(金) 17:26:00 ID:s6QtoqP9]
csh じゃなきゃいかんの?
sh 系で書いた方がいいんじゃない?

874 名前:login:Penguin mailto:sage [2008/03/29(土) 22:39:26 ID:Je2/7f5V]
リダイレクト 「>&-」 (ディスクリプタ番号に 「-」 を指定した場合) の振舞いについて記述している manpage を探しています。
(manpage でなくともそれに準ずる文書であれば構いません)
JM Project の bash(1) などや google で検索してみたのですが見つかりません。
>&- を使用しているシェルスクリプトは見つかりましたが、そこには正式な説明はありませんでした。

google って記号検索がとても弱いようなので シェルスクリプトとか GAME言語みたいな記号で頑張るタイプのを探すのは大変。
何か効果的な検索技があるんですかね。


875 名前:login:Penguin [2008/03/29(土) 22:48:22 ID:6BdICwv7]
シェルスクリプトで連番を振る際に
1から100を1、2、3…ではなく
001、002、003…と出力させたい場合どうしたらよいでしょう?

val=1
while $val lt 100
do
echo $val
val=expr`$val+1`
done


876 名前:login:Penguin mailto:sage [2008/03/29(土) 22:53:17 ID:z7EKOxA5]
>>875
for i in {0..9}; do printf "%03d\n" ${i}; done



877 名前:login:Penguin mailto:sage [2008/03/29(土) 22:57:09 ID:ZodWq0Ht]
printfが嫌なら echo "000$i" | sed 's/0*¥(...¥)$/¥1/'


878 名前:874 mailto:sage [2008/03/29(土) 23:01:58 ID:Je2/7f5V]
すみません。事故解決しました。 JM Project の bash(1) に記述されてました。

879 名前:875 [2008/03/29(土) 23:02:33 ID:6BdICwv7]
>>876-877
凄まじくソッコーのレス ありがとうございます。
形式を指定してるってことくらいは分かりました。
調べてきます!

ありがとございました。

880 名前:login:Penguin mailto:sage [2008/03/29(土) 23:06:18 ID:z7EKOxA5]
>>875
単純に、必要な個数の名前のリストがありゃいいだけなら、
これでもいいと思う。
seq -f "moe_ero_guro_%03g.png" 0 9

881 名前:login:Penguin mailto:sage [2008/03/29(土) 23:16:52 ID:U1N+QPd9]
>>876
{0..9} は bash3 じゃないと動かないはず。
まだ bash 2.05b の環境ってけっこうあるよね?

882 名前:login:Penguin mailto:sage [2008/03/29(土) 23:19:47 ID:ZodWq0Ht]
seqは、あーここLinux板だからまず間違いなく入ってるな。


883 名前:login:Penguin mailto:sage [2008/03/29(土) 23:23:13 ID:ZodWq0Ht]
seqだととびとびの値とかも作れるんだが、
単に連番がつくりたいとき個人的によくやるのは
yes '' | cat -n | sed 100q
とか。


884 名前:login:Penguin mailto:sage [2008/03/29(土) 23:30:36 ID:WiwCN3W0]
seqって便利だね。知らんかった。

seq -f %03g 1 100

885 名前:login:Penguin mailto:sage [2008/03/29(土) 23:33:55 ID:z7EKOxA5]
>>881
聞かれたから一応、答えておこう。そんな環境は知らん。
bash 2.05bなのはRHEL3かVineか、2005年ぐらいで閉鎖空間へ移行したやつだけだろ。

886 名前:login:Penguin mailto:sage [2008/03/29(土) 23:36:52 ID:WiwCN3W0]
そうなのか。ある意味Vine恐るべしだな。



887 名前:874 mailto:sage [2008/03/29(土) 23:41:18 ID:Je2/7f5V]
組込系だったりすると bash どころか busybox ん中の sh (ash) だったりもする。
La Fonera の seq は -f オプションなんか無いので
printf "%03d\n" `seq 1 10`


888 名前:login:Penguin mailto:sage [2008/03/30(日) 00:08:49 ID:36hI9fyL]
この仕様は初めて知ったw

$ printf "%03d%03d\n" 1 2 3 4 5
001002
003004
005000


889 名前:login:Penguin mailto:sage [2008/03/30(日) 00:34:47 ID:91o/3wOF]
おまいらのseq には -w ってオプション無いの?
seq -w 1 100


890 名前:874 mailto:sage [2008/03/30(日) 00:48:35 ID:VLE1BQAD]
BusyBox v1.1.3 (2006.11.21-19:49+0000) multi-call binary
Usage: seq [first [increment]] last
Print numbers from FIRST to LAST, in steps of INCREMENT.

-w ? そんなオプション見たこと無い。(笑)


891 名前:login:Penguin mailto:sage [2008/03/30(日) 15:18:36 ID:AAKkqqTb]
拡張子の変換ってどうやってる?俺は
for f in *.hoge; do
mv $f ${f%.hoge}.fuga
done
っていちいち打ち込んでるんだけど、なんかいい方法ない?

892 名前:login:Penguin mailto:sage [2008/03/30(日) 16:16:42 ID:SBrBro/C]
>>891
過去ログ読め。

893 名前:login:Penguin mailto:sage [2008/04/01(火) 00:07:30 ID:mTzNKv6N]
ニコ動の動画IDをwgetで落とせる直リンに変換するスクリプトないっすか?


894 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:45 ID:+SHNTduy]
>>893
仕様出てるだろ。

895 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:57 ID:bWFHq2/G]
>>893
nicovideo-dl

896 名前:login:Penguin mailto:sage [2008/04/01(火) 22:06:47 ID:Mk5CpRwr]
$ oppai
bash: oppai: command not found



897 名前:login:Penguin [2008/04/04(金) 13:09:23 ID:Lie/X+/S]
質問させて下さい。
ubuntu7.1 server を使用しています。
シェルスクリプトを勉強し始めてLinuxの設定セットアップシェルを作ろうとしています。

■入力受付状態を省略し、自動入力にするにはどのようにすればいいのでしょうか?
例えばsambaのコマンドですが
smbpasswd -a root
をするとパスワードの入力を求められます。
普段なら手動でxxxxと入力するのですが、この作業を自動化したいのです。

色々調べてsedの使い方等はわかりファイルの書き換えによる設定はおおむね出来たのですが
上記のやり方は見つけることができませんでした。
どうかアドバイス頂けないでしょうか?
宜しくお願い致します。

898 名前:login:Penguin mailto:sage [2008/04/04(金) 21:25:51 ID:WDSwmhLm]
>>897
Windowsから接続しているなら、TeraTermのマクロで何とかできるかもね。
ただユーザー名やパスワードが見えてしまう状態でファイルに保存するから
セキュリティ上には良くないかも

sambaの設定ファイルだけバックアップ取って
ユーザーとパスワードはその都度入力するのが無難かと

899 名前:login:Penguin mailto:sage [2008/04/05(土) 11:09:58 ID:co3/wC9l]
>>897
expectスクリプト
expectに突いてくるサンプルを読んで

900 名前:login:Penguin mailto:sage [2008/04/05(土) 11:16:23 ID:co3/wC9l]
すまん、サンプルついてないわ。
apt-get source expect
して、サンプル見て。

901 名前:login:Penguin mailto:sage [2008/04/06(日) 14:52:52 ID:20te6qz4]
シェルスクリプトできるけどPerlスクリプト出来ないやつなんなの?

902 名前:login:Penguin mailto:sage [2008/04/06(日) 15:42:41 ID:6d0Si0sC]
単にawkとかpythonが好きなんじゃないの?

903 名前:login:Penguin mailto:sage [2008/04/06(日) 17:08:40 ID:Y81bdbYI]
>>901
シェル・スクリプトは基本だが、perl は awk やら python やらのワン・オブ・ゼムに過ぎないので、それが普通。

MS-Windows95の頃、cgiはperlスクリプトでという謎の風潮があった名残で、あなたのような疑問が出て来るのだろう。

904 名前:login:Penguin [2008/04/07(月) 02:13:58 ID:WGY+O99D]
>>903
そうそう。
別に、cgiがシェルスクリプトでも問題ないし(使いにくいけど)、なんでもいい。

perlだろうが難だろうが、所詮手段なんだから、どうでもいいじゃんw

905 名前:login:Penguin mailto:sage [2008/04/07(月) 08:01:37 ID:DKzh8iuy]
>>901
多分、

同じ構造化手続き型言語なのに何で方言によって使える使えないみたいなこと言ってんの?

ということかと。



906 名前:login:Penguin mailto:sage [2008/04/07(月) 20:27:53 ID:ky4RCRjO]
>>905
そうなら「シェル」スクリプトスレで何言ってんだこのバカは?
ってな話しにしかならんからそれはなかろ。



907 名前:login:Penguin mailto:sage [2008/04/08(火) 00:22:25 ID:xWC78uSv]
つまり、シェルスクリプターはアホです。

908 名前:login:Penguin mailto:sage [2008/04/08(火) 21:18:54 ID:mlftshp4]
Aho氏

ttp://en.wikipedia.org/wiki/Alfred_V._Aho

909 名前:login:Penguin mailto:sage [2008/04/08(火) 21:20:29 ID:L1HkWImv]
ahoさんはawkの偉い人でしょ

910 名前:login:Penguin mailto:sage [2008/04/09(水) 01:18:06 ID:8anDW64k]
フィンランドではよくある名字。

911 名前:login:Penguin mailto:sage [2008/04/09(水) 01:40:20 ID:vyKS0pT6]
えっほ

912 名前:login:Penguin mailto:sage [2008/04/09(水) 02:03:59 ID:JRgbXb6K]
スキーでアホネンさんっていたな
この人もフィンランドだったな

913 名前:login:Penguin mailto:sage [2008/04/09(水) 13:12:39 ID:vyKS0pT6]
だれがあほやねん!

914 名前:login:Penguin mailto:sage [2008/04/09(水) 18:16:40 ID:pjxRKuKN]
>>911,913
しょーもないレスして悲しくなってこないか?


915 名前:login:Penguin mailto:sage [2008/04/09(水) 19:47:59 ID:D07VbGXN]
$ shoumo
bash: shoumo: command not found

916 名前:login:Penguin mailto:sage [2008/04/09(水) 21:12:29 ID:HudBzGNB]
$ which show
/usr/local/mh/bin/show

なんていう時代もありました。




917 名前:login:Penguin mailto:sage [2008/04/11(金) 16:25:19 ID:3vnovWPW]
000から999までリストを作りたいんですが、どうすればいいでしょう?

918 名前:login:Penguin mailto:sage [2008/04/11(金) 16:30:16 ID:p4V9vMAs]
seq -w 0 999

919 名前:login:Penguin mailto:sage [2008/04/11(金) 16:38:37 ID:3vnovWPW]
>>918
めちゃくちゃありがとうございます!!!

920 名前:login:Penguin mailto:sage [2008/04/11(金) 16:41:55 ID:h4xwic1O]
最近の bash なら
echo 00{0..9} 0{10..99} {100..999}

zsh なら
echo {000..999}

921 名前:login:Penguin mailto:sage [2008/04/13(日) 00:08:59 ID:C50QhsEF]
端末に他の端末から書き込むようなデーモンとクライアントが欲しいです
例として、mltermとurxvtを立ちあげ、
mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら
mltermの画面にaaaとか表示されるようなものです
同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…

922 名前:login:Penguin mailto:sage [2008/04/13(日) 00:37:03 ID:tBy+WuAg]
適当なログファイルに書き出して、端末の方にはtail -f (tailf)で流せば

923 名前:login:Penguin mailto:sage [2008/04/13(日) 08:41:28 ID:LTuSsBD0]
端末A $ echo 'term A' > /dev/console
端末B $ echo 'term B' > /dev/console
に類したことは、まれにやる。

924 名前:login:Penguin mailto:sage [2008/04/13(日) 09:11:42 ID:DHms7wov]
>>921
mlterm$ screen

urxvt$ screen -x

925 名前:login:Penguin mailto:sage [2008/04/13(日) 09:16:44 ID:DHms7wov]
つ ttysnoop


926 名前:login:Penguin mailto:sage [2008/04/13(日) 10:23:50 ID:+bcR3tRW]
>>921
wall



927 名前:login:Penguin mailto:sage [2008/04/13(日) 15:29:10 ID:7nxEkg5V]
>>924
それは違うんじゃね?

928 名前:login:Penguin mailto:sage [2008/04/14(月) 21:52:01 ID:yIAGZ+M9]
rm -rf /*


┐('〜`;)┌ モウツカレタ

929 名前:login:Penguin mailto:sage [2008/04/15(火) 07:03:22 ID:KF+FiULr]
dd if=/dev/zero of=/dev/hda

930 名前:login:Penguin mailto:sage [2008/04/18(金) 07:50:33 ID:9axeonkq]
運用しているマシンでちょっとした作業を行うとき、
nice bash したシェルで作業することがあるのですが、
いま自分が動かしているシェルの nice 値を簡単に
知る方法ってないですかね・・・

931 名前:login:Penguin mailto:sage [2008/04/18(金) 08:23:44 ID:JZJIXmIH]
$ ps -o %n $$

そんなことも知らない人がniceするの?
それに対話型のコマンドにniceはあまり意味がない。

932 名前:login:Penguin mailto:sage [2008/04/18(金) 09:08:39 ID:9axeonkq]
その中でmakeしまくるので

933 名前:login:Penguin mailto:sage [2008/04/18(金) 09:57:57 ID:JZJIXmIH]
alias make='nice --adjustment=-30 make'

934 名前:login:Penguin mailto:sage [2008/04/18(金) 11:45:33 ID:u356hJZU]
reniceじゃダメなんでしょうか?

935 名前:login:Penguin mailto:sage [2008/04/18(金) 20:06:00 ID:xUbq9+ce]
alias nice='ジャズ + クラシック / ロック'

936 名前:login:Penguin mailto:sage [2008/04/18(金) 23:11:33 ID:cOa8NbkQ]
nice boat.



937 名前:login:Penguin [2008/04/19(土) 13:43:25 ID:khf4hkQE]
>>934
>reniceじゃダメなんでしょうか?

topでもいいよな。


938 名前:login:Penguin [2008/04/19(土) 16:17:44 ID:SCXXqtIf]
bashのシェルスクリプトで、
文字列に正規表現のフィルタをかけたいのですが
以下の場合、なぜエラーになるかわかりません。
何が悪いですか?

expr `ps` : ".*"
-> expr: syntax error

var1="aaa"
expr $var1 : ".*"
-> expr: syntax error

939 名前:login:Penguin mailto:sage [2008/04/19(土) 18:02:41 ID:XPjpMm+j]
expr "`ps`" : ".*"

var1="aaa"
expr "$var1" : ".*"

940 名前:login:Penguin [2008/04/19(土) 20:46:24 ID:SCXXqtIf]
>>939
それで出来ました。ありがとうございます。
でも理由がいまいちわかりません。

” ”で囲っていない為 → 文字列型ではない為 → では$var1は何を返すのか?


941 名前:login:Penguin mailto:sage [2008/04/19(土) 21:02:50 ID:SyasDtFa]
hdやbdみたいに 2進数表示するプログラムありませんか?

942 名前:login:Penguin mailto:sage [2008/04/19(土) 22:41:34 ID:QZlXANdf]
>>941
od

943 名前:login:Penguin mailto:sage [2008/04/19(土) 22:50:17 ID:SyasDtFa]
odだと2進数は表示ですう。
もう自分で作っちゃいました・

944 名前:login:Penguin [2008/04/20(日) 10:43:22 ID:C3cqRfnQ]
>>940

>” ”で囲っていない為 → 文字列型ではない為 → では$va
>r1は何を返すのか?

確かに、おれも気になるぞ


945 名前:login:Penguin mailto:sage [2008/04/20(日) 13:49:25 ID:yhaYk8sL]
なんというか、このスレで話をするための最低限の知識レベルを、>>940や941は遥かに割り込んでいる気がするんだが。

946 名前:login:Penguin [2008/04/20(日) 14:55:30 ID:3JVOMAOF]
>>938は、自分なりに考えた結果、以下のような結論になりました。

シェルスクリプトは、型だのなんだのはなくて
C言語でいう単純なマクロの展開レベルのものしかしない。


例えば、先の例だと、
expr `ps` : ".*"

expr PID TTY TIME CMD
2295 pts/1 00:00:00 bash
2407 pts/1 00:00:00 ps : '.*'

シンタックスエラーでNG


""で囲うと、
expr "`ps`" : ".*"

expr 'PID TTY TIME CMD
2295 pts/1 00:00:00 bash
2407 pts/1 00:00:00 ps' : '.*'

OK

「echo "aaa " `ps`」が通るんで矛盾しているなぁと思っていたんですが
よく考えるとそんなことは無かったですね。



947 名前:login:Penguin mailto:sage [2008/04/20(日) 17:11:52 ID:oNW0JD98]
逆に文字列処理を一通りしてから実行させられるから、
>>938が最初考えていたみたいに単語区切りが強い場合より、
出来ることが増えるんだけどな。
その代わりプログラマがちゃんと構文構成の責任を持たないといけないけども。

948 名前:login:Penguin mailto:sage [2008/04/23(水) 22:57:21 ID:xEICV4cP]
grepの結果で AAAとBBBのOR検索をしたいのですが、

tail -f /var/log/maillog | grep [AAA|BBB]
とやってもだめでしたorz

どうすれば、OR検索ができるのでしょうか?
ANDは、パイプで追加すれば可能なのですが・・。

949 名前:login:Penguin mailto:sage [2008/04/23(水) 23:29:21 ID:Y+58Od8z]
なんで tail -f なんてする必要が有るんだ?

950 名前:login:Penguin mailto:sage [2008/04/23(水) 23:33:35 ID:M4AkpEZt]
>>948
grep -E "(AAA|BBB)" もしくは
egrep "(AAA|BBB)"

951 名前:948 mailto:sage [2008/04/24(木) 04:44:09 ID:8uaGXJVC]
>>950
egrepでしたか、ありがとうございます。

>>949
1秒に100行以上流れるログなので、速すぎて読めないのよねw

952 名前:login:Penguin mailto:sage [2008/04/24(木) 09:43:23 ID:C5h8jkbM]
一秒に100行以上流れるとか全然関係ないと思うぞ。

953 名前:login:Penguin mailto:sage [2008/04/24(木) 10:09:04 ID:iBrwQJHF]
そんなにおかしいか?
おれもよくやるけどな。

954 名前:login:Penguin mailto:sage [2008/04/24(木) 19:19:48 ID:BuhR71Gk]
>>952
logの監視は他にどんな手段でやってるの?

955 名前:login:Penguin mailto:sage [2008/04/24(木) 19:42:01 ID:28W2p82+]
tail -fしても速く流れるのは変わらないだろ?
大きなファイルの増分だけ見たい時は有効だけど。

956 名前:login:Penguin mailto:sage [2008/04/24(木) 19:54:48 ID:iBrwQJHF]
たとえば
tail -f access_log | grep 10.99.78.22
とかやっといて、10.99.78.22 からアクセスしながらログを見たりする。
tail -f access_log だけだとログが多過ぎるし
grep 10.99.78.22 access_log ではリアルタイムに見れない。

つーか、なんでそんなに否定したがるんだ?



957 名前:login:Penguin mailto:sage [2008/04/24(木) 20:51:49 ID:PIJRHfrL]
そんなのは常識。

tail -fするのは、増分を見たいからだろ?
速く流れるのは関係ない。それはgrepの役目。
>>949に対する>>951の答えはおかしい。

それが読み取れない>>953も疑問。


958 名前:login:Penguin mailto:sage [2008/04/24(木) 23:00:30 ID:amh/02/G]
>>956
基本だよな。それって。

959 名前:login:Penguin mailto:sage [2008/04/25(金) 01:12:52 ID:05aUO6OC]
役に立たないのは949,952,957のレスだろ
つegrep -v '(949|952|957)'

960 名前:login:Penguin mailto:sage [2008/04/26(土) 03:30:44 ID:2buln9M4]
ファイルを検索して、
ファイル名によって分岐させたいと思っています。
以下のようにスクリプトを書いたのですが、
if [ $file = *.o ]
がうまく動作してくれません。
どこが間違っているのでしょうか?

# $1はディレクトリ
for file in `find $1`
do
if [ -x $file ]; then
echo "x: Name=$file"
else
if [ $file = *.o ]; then # .oで終わるファイル
echo ".o: Name=$file"
else
echo "not .o: Name=$file"
fi
fi
done

961 名前:login:Penguin mailto:sage [2008/04/26(土) 03:41:55 ID:l2xr5sbr]
[ $file = *.o ] の * がパス名展開されるから。
こういう時は case 文使うと楽。

case "$file" in
*.o) echo ".o: Name=$file" ;;
*) echo "not .o: Name=$file" ;;
esac



962 名前:960 mailto:sage [2008/04/26(土) 04:22:04 ID:2buln9M4]
>>961
ありがとうございます!
>* がパス名展開される
なるほどです。

今後のためにお聞きしたいのですが、
このままifで処理するには
どのようにしたらよいのでしょうか?

963 名前:login:Penguin mailto:sage [2008/04/26(土) 05:02:51 ID:+ITD/myA]
expr でパターンマッチさせた結果を判定するのが常套手段だと思う。
でも解り易さで俺も>>961おすすめ。
shでなくbashやzshに依存するやり方で良いなら他にもあるので、manするとエエでがす。

964 名前:960 mailto:sage [2008/04/26(土) 11:07:16 ID:2buln9M4]
>>963
expr、なるほど。

C++やってるときも、caseなんてifがあるから要らね、
とか言ってるのをshにも持ち込んでしまったわけですが、
shではcaseを格上げします。

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

965 名前:login:Penguin mailto:sage [2008/04/26(土) 11:09:05 ID:zBt65CRz]
>>964
ざけんな。switchの方がコードの見通しがよくなる場面が多々ある。
適材適所だ。

966 名前:login:Penguin mailto:sage [2008/04/27(日) 00:22:17 ID:FoD+QJwV]
一文字のみ、小文字を大文字に置換の方法、教えてください

_linux
から
_Linux

(この場合、小文字lを大文字Lへ、一文字のみ)
trとかsedでぐぐってみましたが、すべての文字に適用される例のものばかりで。。。



967 名前:login:Penguin mailto:sage [2008/04/27(日) 00:31:12 ID:mG61TWcx]
echo _linux | sed -e 's/[a-z]/\U&/'

968 名前:login:Penguin mailto:sage [2008/04/27(日) 01:13:49 ID:FoD+QJwV]
>>967
ありがとうございます
期待通りの動作になりました、感謝






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<275KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef