08/02/05 19:22:58 E60rvXpx
>>575
望みどおりの出力を得ることができました!
早い回答感謝します。
ありがとうございます。
578:login:Penguin
08/02/06 21:11:41 Qs2nEtFk
すみません、次の表現ってどういう意味なんでしょうか
($Fはlsの結果が入る)
if expr "$F" : '[[:alunum:]_-]\+$' > /dev/null 2>&1; then ...
特に : '[[:alunum]_-]\+$'の箇所が分かりません
自分で調べて分かったのは
[:alunum:]が数値を表すPOSIX準拠の文字クラスであること
:はヌルコマンド
[]が正規表現とすると[[:alnum:]_-]\+$は以下のいずれかという意味でしょうか
数値+$
_+$
-+$
だとしても前半の:とのつながりもよく分からないです..
579:login:Penguin
08/02/06 21:39:32 2Q3KS/FB
そのコロンはexpr の引数であって、パターンマッチを行わせるもの。
ヌルコマンドではない。
[[:alnum]]_-]¥+$ は、
「英数もしくは _ もしくは -」([[:alnum]]_-])の繰り返し(¥+)で末尾になる($)パターン。
つまり$Fが↑のパターンにマッチするかで判断するif文だな。
出力を/dev/nullに捨てている理由は、exprの動作を調べればわかる。
580:login:Penguin
08/02/06 22:12:35 Qs2nEtFk
>>579 ありがとうございます。やっと理解できました!
exprについては、nullまたは0を返した際に0を返すという仕様のため
/dev/nullに出力していることはすぐ分かったんですが
「:」もexprの構文だったんですね
ずっとシェルのパターンマッチの構文として「:」を調べていたため
ハマってました,thx!
581:login:Penguin
08/02/07 17:29:04 SojUAx7O
リダイレクトで先頭5行目から行末から5行目前までを出力したいのですが、
??? | head -n xx | tail -n xx 以外に良い方法はあるでしょうか
582:login:Penguin
08/02/07 18:31:29 K+RTjMO0
なにをしたいのか、君の示した例は本当に目的を満足してるのか、
もういちど確認した方がよいと思われ
583:login:Penguin
08/02/08 08:15:13 D8JF1iVI
では、headとtailは使わずに。
sed -n '5,$p' file.txt | tac | sed -n '5,$p' | tac
…意義が見出せない。。。
584:581
08/02/08 15:35:34 aAYt8gpF
>>583
sedは習ってないので提出できないんですよ
他にないですか?
585:login:Penguin
08/02/08 15:38:14 Yg3sGZTq
>>584
白紙で出せば...
586:login:Penguin
08/02/08 16:08:13 z5e2UbEF
{ read a;read a;read a;read a;tac; } | { read a;read a;read a;read a;tac; }
587:login:Penguin
08/02/08 16:57:33 rygBoGE6
習っていないと使えないって、そんな小学校じゃあるまいし
588:login:Penguin
08/02/08 19:53:27 8gRlFmfx
>sedは習wwwwってwwないのwwwで提出でwwきないんですよww
>他になwwwwいですか?www
のように、wを適当にまぶすスクリプトを誰か考えてくれ。
589:login:Penguin
08/02/08 21:34:44 Z8wDJkcZ
>>588
こんなwwのを作っwwwwてみたんwwだがww
どうだろうかwww
とりあえずwwwwちゃんwwと動いてるよwwうだがwwww
どんな例外wwがあるwwかわからんwww
#!/bin/sh
CHAR='w'
insertw() {
i=0
w=`expr $RANDOM % 3 + 2`
while [ $i -lt $w ]; do
i=`expr $i + 1`
echo -n $CHAR
done
}
while read LINE ;do
while [ "$LINE" ]; do
r=`expr $RANDOM % 6 + 2`
echo -n `echo $LINE | cut -c -${r}`
insertw
r=`expr $r + 1`
LINE=`echo $LINE | cut -c ${r}-`
done
echo ""
done
590:589
08/02/08 21:45:59 Z8wDJkcZ
初心wwww者でサーセンww
$RANDwwwwOM使wwってるのwwwで本wwww当のshではww動かなwwwいはずだけど,wwwここはwwLinux板wwwってことwwwで許wwwwしてもらえるwwよね?
591:login:Penguin
08/02/09 21:05:58 sA/Tx79N
あの~、正規表現についてお聞きしたいのですが
[a-z]で小文字のアルファベット全てにマッチですよね。
ならば
[あ-ん]でひらがな全てにマッチしますか?
592:login:Penguin
08/02/09 21:44:35 y7ESpv1X
yes
593:login:Penguin
08/02/10 00:32:01 HzElnwAK
「ぁ」はマッチしないのでは?
それはそうと、多バイト文字の正規表現って、大抵のアプリケーションで普通に使えるものなのか。
知らなんだ。
594:login:Penguin
08/02/10 01:02:27 bq0IfXwT
質問です。ファイルの対象部分に別のファイルを挿入するコマンドってありますか?
% cat file1
aaa%sbbbccc
% cat file2
ZZZ
% hoge %s file2 < file1
aaaZZZbbbccc
のような動作を期待しています。
挿入するファイルは少し長めなのでsedで置換ではできない気がしています。
awkあたりでfile1を%sが出るまで出力 -> file2を出力 -> file1の%s以降を出力
という方法を考えていますが、もし専門のコマンドがあれば教えてください。
595:594
08/02/10 01:12:39 bq0IfXwT
誤爆先でm4というのを教えてもらいました。
一旦使ってみます
596:login:Penguin
08/02/10 01:14:06 AyxHcvsn
そういうのはエディタで
597:login:Penguin
08/02/10 01:52:24 EflaE009
>>595
おまえFedoraすれにいなかったか?
598:login:Penguin
08/02/10 06:29:30 7q9QRaK3
>>594
printf "`cat file1`\n" `cat file2`
599:login:Penguin
08/02/11 23:47:20 wSzjm7y4
>>593
grep でやってみたらマッチしやがったよ。
600:login:Penguin
08/02/12 02:36:00 NhGbxXsu
文字列として検索できるということと、
全角文字も一文字として扱える、というのとでは意味がぜんぜん違う。
601:login:Penguin
08/02/13 03:57:10 Z8x6psMH
[あ-ん]と[\xe4\x1c-\xe4\x5f]ではまるで別物だしな(コードは適当)
602:login:Penguin
08/02/13 23:44:52 3LjmFUst
#スレ違いだが。
MS-Windowsとの可搬性に最も富むスクリプトは何ですか?
ただし、cygwin環境とperlは除外して。
603:login:Penguin
08/02/13 23:58:15 jHUDsaVW
>>602
javascriptに一票
604:login:Penguin
08/02/14 00:56:22 axFZQkw/
>>602
awk,ruby,Python つーかなんでperlダメなの?
たしかにWinのperlめんどいけどね。
605:login:Penguin
08/02/14 20:13:50 oi3zsBt5
ディレクトリにあるmp3ファイルを1行に3つずつ番号付きで表示して
指定されたファイルを再生するスクリプトを考えてみました。
これだとファイル表示の見た目がいまいちなんですが、カラムを揃えて
表示するようなうまいやり方はありますか?
i=1
for file in *.mp3
do
#3カラムで出力する
x=`expr $i % 3`
if [ $x -eq 0 ]
then echo -e "\033[1;31m$i\033[0m.$file"
else
echo -en "\033[1;31m$i\033[0m.$file "
fi
a[i]=$file
(( i=i+1 ))
done
echo -n "number? >"
read n
if [ -f "${a[n]}" ]
then mplayer "${a[n]}"
else
echo "ファイルがありません"
fi
606:login:Penguin
08/02/14 21:53:57 gBoeKdqH
>>605
#!/bin/sh
FS=`zenity --file-selection`
#このままだと動画なんかもいけるけど、どうしても*.mp3のみにしたい場合は↑行を
#コメントアウトして↓行を有効にする
#FS=`ls *.mp3 | zenity --list --column "Files"`
if [ -z "${FS}" ]
then
exit
fi
mplayer "$FS"
なんつってってねw
607:login:Penguin
08/02/14 22:01:12 vsXOhty3
zenityってなんだろーと思ってググったら……反則すぎ。
608:login:Penguin
08/02/14 22:52:41 fZu2vsjD
>>604
perl.exeの他に色々MS-Windows側に入れなきゃならないものがあるので可搬性に欠けるという理由を考えてみましたが、実は嫌いなだけです。
>>605
3列にこだわらないのなら、bashのselectはどうでしょう。
#!/bin/bash
select name in *.mp3
do
echo "mplayer ${name}"
#break
done
609:login:Penguin
08/02/15 02:46:55 4QUqq28I
>>605
printf で頑張るという選択肢もある。
610:605
08/02/15 19:02:00 BuE7cyMU
>>605の件ですが、レスしてくれた方々、ありがとうございます。
selectを使うのが簡単でイメージどおりなので、それでいきたいと思います。
611:login:Penguin
08/02/16 14:41:12 rUKDlild
久しぶりに来たけど相変わらず
キモいね
612:login:Penguin
08/02/16 14:52:30 TWToK0Vy
シェルに閉じこもってるスレですから
613:login:Penguin
08/02/16 15:09:40 hFdiJNir
ちょっとは環境変数も気にしろよ
614:login:Penguin
08/02/16 15:14:02 TWToK0Vy
export KIMOI=false
615:login:Penguin
08/02/16 15:25:59 hFdiJNir
$ export KIMOI=false
> if [ $KIMOI ]; then
> echo kimoi
> else kimokunai
> fi
kimoi
となります.助けてください><
616:login:Penguin
08/02/16 16:57:40 TCXFbGKj
釣られてやるが
if $KIMOI; then
617:login:Penguin
08/02/16 19:13:59 TWToK0Vy
いやいや、キモイとかキモクナイを超越することこそが答なのだよ。
export KIMOI=
が正解なのだ。
618:login:Penguin
08/02/17 01:08:38 iw9ufgAV
>>615-616
なぜそうなるか素人の私にも解説してくだされぇ~
619:login:Penguin
08/02/17 01:11:52 slw092IT
>>616 素で知らなかった.ありがと!
620:login:Penguin
08/02/17 01:27:34 PyTcVmai
/usr/bin/[≒/usr/bin/test
621:login:Penguin
08/02/17 03:00:02 tnXxiXa8
>>618
if文やwhile文の条件部に書くのは、実はコマンド。
コマンドの終了コードが0なら条件が成立したとみなされる。
で、true(0を返す)やfalse(1(非0)を返す)というコマンドがあるわけだな。
ちなみに [ もコマンドだ。
622:login:Penguin
08/02/17 09:32:32 OGJD7PPY
みんな釣られ過ぎ…
$KIMOIに"false"という文字列を代入してるだけ。
623:login:Penguin
08/02/17 14:07:35 4A7UiB6D
>>612
俺らはゴーストですか
624:login:Penguin
08/02/17 14:21:15 slw092IT
>>623
ネットは広大だよな
625:login:Penguin
08/02/17 14:29:38 uY7SK9GA
>>623
否、貴腐人間かもw
626:login:Penguin
08/02/17 14:38:41 slw092IT
>>625
元ネタwkrn
627:login:Penguin
08/02/17 14:42:27 uY7SK9GA
>>626 「貴腐老人」でggrks
628:login:Penguin
08/02/17 14:44:26 slw092IT
>>627
tnks
629:login:Penguin
08/02/18 07:12:54 AGIm4SRV
zenity でファイルの選択をさせるのに、最初に任意のフォルダを開くにはなんと書けばいいのか教えて下さい。
630:login:Penguin
08/02/18 11:55:16 VgIMGwkB
カレントディレクトリを開くみたいだから、サブシェルを使ってこんな感じでどうかな
(cd /; zenity --file-selection)
631:login:Penguin
08/02/18 13:16:10 AGIm4SRV
>>630
ありがとうございます。
やってみます。
632:login:Penguin
08/02/19 08:50:21 90boQwVS
シェルスクリプトを覚えるとなにが出来るようになるんですか?
633:login:Penguin
08/02/19 09:00:32 7ADZuvq7
>>632
ルーチンワークで楽できる(場合がある)
634:login:Penguin
08/02/19 16:05:41 VrKwqWf/
>>632
作業の自動化や、例えばユーザを100人登録しないといけないとか言う、膨大な作業を
物凄い速度で短時間で終わらせる事が出来るようになるとか。
635:login:Penguin
08/02/19 17:25:49 90boQwVS
>>633>>634
ほほぅ、ありがとうございます。
636:login:Penguin
08/02/19 19:54:38 oWc/fsPo
ほほうって、コンピュータに仕事をさせるという観念のない人なんだろうか。
高級な紙と鉛筆だとしか思ってなさげな人。たまにいるけど……。
637:login:Penguin
08/02/19 19:56:54 7ADZuvq7
魔法の箱だと思ってるよりマシだと思う
638:login:Penguin
08/02/19 23:07:22 VrKwqWf/
コンピュータは ある機能を実現させる為の方法(アルゴリズム)を示してやれば
どんなにそれが重労働だろうが難しい計算をしないといけなかろうが、
忠実に高速かつ正確、大量に実行させる事が出来るから凄いよ・・・。
ただし、その仕事の仕方を教える(アルゴリズムを教える)のがかなり苦労するんだけどな・・・。
639:login:Penguin
08/02/20 03:07:58 eOYCs3Nz
基本的に人間がやってもできることを高速ですることしかできないということを知らない人が多すぎる
640:login:Penguin
08/02/20 03:37:12 Z0UaqwNw
それは、一秒間に3ギガ回も足し算したり、地球の裏側に光の速度で手紙を届けたりなんつーのは
基本的に人間には絶対できない、ということを知らない者は>>639だけだというだけの話かと。
641:login:Penguin
08/02/20 04:33:00 H+YlTABW
君も頭悪いな。
639は高速で、と書いてあるんだから、「速度を問わなければ」人間が…と
読むのが妥当という答にしかならないぞ。
どうせそういう突っ込みするなら空間計算量でやればよかったのに。
642:login:Penguin
08/02/20 07:24:32 kPfB9gdm
理論ばっかりのたまって生産性の無い人ってよくいるよね。
643:login:Penguin
08/02/20 08:22:42 TBsfl6zQ
まとめ。
Q) シェルスクリプトを覚えるとなにが出来るようになるんですか?
A) 理論ばっかりのたまって生産性の無い人ってよくいるよね。
644:login:Penguin
08/02/20 09:09:29 s2YtVBn2
>>632
シェルスクリプトでやりたいと思ったこと。
645:login:Penguin
08/02/20 10:22:00 0BB6Gw/L
俺は…彼女にパイズリして欲しいな…。
乳はAAだけど orz
646:login:Penguin
08/02/20 10:22:28 0BB6Gw/L
>>645
誤爆った。正直スマンかった。
647:login:Penguin
08/02/20 10:47:15 VHJ6cFjQ
>>645
基本的に彼女ができないことなのでシェルスクリプトでもできません。
648:login:Penguin
08/02/20 11:22:35 eOYCs3Nz
>>647
AAでもいいということなので,アスキーアートでおっぱいを表現することならシェルスクリプトで可能です
さらに最近のターミナルエミュレーターはアンチエイリアスがきいてるのでなめらかですよ
649:login:Penguin
08/02/20 11:31:04 Z0UaqwNw
すごいな。>>641は地球の裏側に手紙を届けたりなんてことが「ゆっくりならできる」そうだ。
できるというなら精々一生をかけて歩いて船をこいで手紙を届けにいって、それを証明してほしいものだ。
コンピュータという人間が使うモノが、人間以上の方法(アルゴリズムなどの知性)を知らないのは当然のことだが
最近ではその知性すら、コンピュータを使ったシミュレーション解析などで
得ることが増えているのが現実だったりするわけで。特に知の最先端ほどそうだ。
もはや人類はコンピュータを使わないと新しい知識を得ることすら「できない」状況なんだけどね。
そういう現実が見えない人はやっぱり自分の納得を唯一の判断基準とする文系人かな。
人間は遠くのものが見え、遠くの人と話し、より多くの知識を得、共有できるようになった。
100年前に比べたら、ほんとうに夢の魔法かコミックの世界だ。コンピュータはほんとに魔法の箱みたいじゃないか。
そのセンスは逆にあまり間違っていない気がするけどな。
「高度に進んだ科学技術はもはや魔法と見分けがつかない」アーサー・C・クラーク
650:login:Penguin
08/02/20 12:06:00 eOYCs3Nz
>>649
日本語でおk
電報というものがあるんだが最近のゆとりは知らないのか?
651:login:Penguin
08/02/20 12:14:29 pg37fRgc
ゆとり言いたいだけちゃうんかと
652:login:Penguin
08/02/20 12:23:41 XajlgLxx
ネタはよそでやっとくれよ。
653:login:Penguin
08/02/20 16:28:17 vrkF+BtG
このスレの>>640や>>641の意見が興味深い。面白いな・・・。
>>648
そういうシェルスクリプト作って公開してよwwwwぜひ実行してみたい・・w
654:login:Penguin
08/02/20 19:29:13 7TuVNRao
先日の芥川賞受賞作が>>649の文章に似てる。
句点から次の句点まで地球半周ぐらいあって、だらだらと続く感じが。
URLリンク(sankei.jp.msn.com)
655:login:Penguin
08/02/21 06:19:36 FDbXS9I4
>>649
こういう無駄な長文を書ける才能には素直に感心するよ。
656:login:Penguin
08/02/21 12:33:09 xpu03eg4
時間を持て余してるんだろ?
657:login:Penguin
08/02/21 18:35:15 oj1Q2W6E
ある意味うらやましい知性だ。
658:login:Penguin
08/02/24 10:15:17 RUTtO6AQ
slコマンドってなかった?画面いっぱいにSLを表現
あれはシェルスクリプトではないから違うか・・・。
659:login:Penguin
08/02/24 11:38:47 kyu4Np6c
>>658
つ www.tkl.iis.u-tokyo.ac.jp/~toyoda/
660:login:Penguin
08/02/24 13:02:41 FjGZZj6V
bashです。
cdするたびに一緒にlsもして欲しいんですが、どうやって書いたらいいでしょうか?
aliasだとうまくできないです。
661:login:Penguin
08/02/24 13:04:14 UaS7yo8D
alias cls='cd $1 && ls'
662:login:Penguin
08/02/24 13:21:41 CzUoXlF2
clsといったらCLear Screenだろうに
663:login:Penguin
08/02/24 13:24:30 UaS7yo8D
そうなのか。うちにはそんなコマンドないって言われたもので。
664:login:Penguin
08/02/24 14:04:47 I77Y2jQo
そりゃDOSのコマンドだからな。
665:login:Penguin
08/02/24 14:44:06 FjGZZj6V
>>661
できないみたいです。
カレントディレクトリが切り替わりません。
666:login:Penguin
08/02/24 14:53:32 UaS7yo8D
>>665
うちでは動作確認したんだが・・・なんでだろね。
667:login:Penguin
08/02/24 14:54:08 UaS7yo8D
あ、ほんとだ、切り替わらないねw
668:login:Penguin
08/02/24 15:09:41 I77Y2jQo
PROMPT_COMMAND='if [ "$PWD" != "$PWD2" ]; then ls; PWD2="$PWD"; fi'
669:login:Penguin
08/02/24 15:13:49 uTpa9gVS
>>667
ぢゃあ関数にしちゃうとか。
function cls {
cd $1 && ls
}
670:login:Penguin
08/02/24 15:23:08 UaS7yo8D
cdはシェルの内部コマンドだから親プロセスには反映されないんだねえ。
#!/bin/sh
cd $1
ls
として、foo.shとして、
alias cds='. foo.sh'
かなあ。動作確認はしたw
671:login:Penguin
08/02/24 15:36:14 FjGZZj6V
できればclsじゃなくてcdでやりたいです。
>>669,670 でcdにするとなぜか動かない。
でも参考になりました。
>>668
わかんないです。
672:login:Penguin
08/02/24 15:41:52 FjGZZj6V
#!/bin/sh
'cd' $1
ls
として、foo.shとして、
alias cd='. foo.sh'
でできました。(・∀・)イイ!
ありがとう。
673:login:Penguin
08/02/24 15:42:06 Sa+MU/+b
cd() {
builtin cd $1 && ls
}
674:login:Penguin
08/02/24 15:46:14 I77Y2jQo
( ゚д゚)……
675:login:Penguin
08/02/24 15:47:40 UaS7yo8D
>>673
ビルトインか。やっぱりman読まないとダメだな。
ありがとう。
676:login:Penguin
08/02/24 15:54:18 l3aT8ww/
ほう、すげっ
677:login:Penguin
08/02/24 15:55:21 FjGZZj6V
>>673
それも(・∀・)イイ!
トン
678:login:Penguin
08/02/24 16:08:01 OZdK2Ezs
668は逆にわかりやすいと思うが・・・なぜ分からぬ
679:login:Penguin
08/02/24 16:57:30 M1aIs9jI
>>659
slねぇ・・・Vine 3.2だとmakeしてもエラーが出てmake出来ないんだけど・・・?
apt-get install build-essential は入ってる環境です。
680:login:Penguin
08/02/24 21:43:32 X4+soAGj
>>679
libncurses.soのことか?
681:login:Penguin
08/02/24 22:41:47 WU8Eis2Q
>>673
cd に -P とかオプションつけると機能しなくなるぞ。
cd() { builtin cd "$@" && ls; }
682:login:Penguin
08/02/24 22:44:30 CzUoXlF2
>>673,>>681
それしばらく使ってみるとわかると思うけど、
そのままではナイーブすぎて少し不便だよ。
zshで同じようなことやってるけど、次の点は考慮した方がいいです。
・サブシェルで実行されたときにはlsしない
・行数が多すぎるときは適当な長さで切り、省略した旨を表示
683:login:Penguin
08/02/25 12:48:54 fTf5K0mT
同一内容のファイルを調べるシェルスクリプトなんだけど、過去にここかUNIX板の方で出てたっぽい。
結局やらず仕舞いだったようだし、どうせならシェルスクリプトの勉強がてらやってみようとおもった。
作りたい理想は以下のとおり
・コマンドラインでオプション指定を行い、検索ディレクトリとサブディレクトリへの再帰検索をするかどうか、あとファイルサイズ閾値を指定できる
・走査しているディレクトリにあるファイルパス&ファイルサイズのペアをリストとして吐く
・ファイルサイズ閾値未満で、ファイルサイズが一致したものに対してmd5sumを実行し、両方が同一のハッシュを吐いた場合、表示する。
・ファイルサイズ閾値を設定する理由はmd5sumが時間がかかりそうだから。閾値以上のサイズ一致ファイルはmd5sumすることなく表示する。
684:login:Penguin
08/02/25 12:52:01 fTf5K0mT
ちなみにサブディレクトリの再帰検索をせず、指定したディレクトリの全てのファイルのハッシュ値を比較して表示するだけなら
#!/bin/sh
md5sum $1/* | uniq -D --check-chars=32 | sed 's/^[0-9a-f]* \*//g'
上のだけで済むかな。標準エラーがうざいけど・・・
まずはディレクトリの再帰検索について質問したいところです。
685:login:Penguin
08/02/25 12:55:37 fTf5K0mT
あ、uniqの間にsortを入れてあげるとより親切か
うちの場合はwgetで自動保存したファイルの整理だから、ファイル名が必然的に「DLファイル名+.連番」だから気にならないけど
まったく違うファイル名かつ内容は同一ってときに、ハッシュ値でsortしてあげていた方がいいよね
そう考えたらsedでハッシュ値をわざわざ消す必要もないか・・・
md5sum $1/* | sort | uniq -D --check-chars=32
686:login:Penguin
08/02/25 12:57:54 fTf5K0mT
再帰検索はこの場合、find $1でファイルリストを列挙してからreadで"ls->ファイルサイズ取得"やら"md5sum"やらした方がいいのかな?
687:login:Penguin
08/02/25 13:38:12 fTf5K0mT
不恰好だけどサブディレクトリまで調べて、全てのファイルにmd5sumして表示するのはこんな具合か・・・
#!/bin/sh
TMPFILE="filelist"
touch $TMPFILE
find $1 | while read FILENAME; do
if [ -f "$FILENAME" ]; then
md5sum "$FILENAME" >> $TMPFILE
fi
done
sort < $TMPFILE | uniq -D --check-chars=32
rm $TMPFILE
もうちょっとスマートにならないかなあ・・・ あとユニークなサイズのファイルはmd5sumさせたくないなあ
688:login:Penguin
08/02/25 13:47:58 pu40lUxS
書いてみた。
#!/bin/sh
# finddup.sh -- find . | finddup.sh
while read -r FILENAME
do
[ -f "$FILENAME" ] &&
printf "%14d:%s\n" `stat -c %s "$FILENAME"` "$FILENAME"
done | sort | uniq -D -w14 | cut -b 16- |
xargs md5sum | sort | uniq -D -w32
689:login:Penguin
08/02/25 13:53:38 pu40lUxS
uniq -f のほうが良さそうだね
690:login:Penguin
08/02/25 13:57:12 ATO0A7OZ
>>687
find . -type f -print0 | xargs -0 md5sum | sort | uniq -D -w32
691:login:Penguin
08/02/25 14:17:36 fTf5K0mT
>>688
ありがとう!
あ、ただファイルやディレクトリ名にスペースが入るとmd5sumにしっかり渡せないみたいです
bash on cygwin環境だとWindowsの「コピー (2) ~ hoge.txt」という名前が恨めしい
>>690
出力結果同じだΣすげえ
ちょっとman読んでこよう・・・
692:login:Penguin
08/02/25 14:23:38 pu40lUxS
xargs --delimiter "
" md5sum
でどうかな。ちゃんとテストしなきゃだめだね
まあ改行文字を含むファイルがあるとだめなんだけど、面倒だから他の言語でやらせたほうがいい
693:login:Penguin
08/02/25 14:26:43 ATO0A7OZ
>>692
>>690
694:login:Penguin
08/02/25 14:27:32 pu40lUxS
>>693
全部のファイルにmd5sumかけたら遅いだろ
695:login:Penguin
08/02/25 14:31:42 fTf5K0mT
あ、>>688のxargs md5sumを>>690のようにxargs -0 md5sumにすればOKなのかな
696:login:Penguin
08/02/25 14:38:34 ATO0A7OZ
>>695
んで、printf 側でも \n じゃなく \0 を使うようにする。
697:login:Penguin
08/02/25 14:39:51 pu40lUxS
uniqとcutはどうするよ
698:login:Penguin
08/02/25 14:43:11 fTf5K0mT
printfで囲ってやればイケました(`・ω・´)
#!/bin/sh
# finddup.sh -- ./finddup.sh target-path
find $1 | while read -r FILENAME
do
[ -f "$FILENAME" ] &&
printf "%14d:\"%s\"\n" `stat -c %s "$FILENAME"` "$FILENAME"
done | sort | uniq -D -w14 | cut -b 16- | xargs md5sum | sort | uniq -D -w32
699:login:Penguin
08/02/25 15:21:01 zYqxhFYE
久々にまともな流れだな
700:login:Penguin
08/02/25 16:57:52 fTf5K0mT
ついでに以下のような動きが出来ないか色々試してみています。
どうも二進も三進も行かない
$ ./findup.sh ~/pic/jun.2chan.net/
2件の一致ファイル:8f7c1e2adb45adbfdb4d86adb1b9e894--------------------------
~/jun.2chan.net/b/src/1192805081129.jpg
~/jun.2chan.net/b/src/1192805081141.jpg
-------------------------------------------------------------------------------
~/jun.2chan.net/b/src/1192805081129.jpgを削除しますか?[y/N/a]
~/jun.2chan.net/b/src/1192805081141.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1192805081141.jpgを削除しました。
3件の一致ファイル:6fc4bdc4bc3bb06882bc98d9cbeb60c3--------------------------
~/jun.2chan.net/b/src/1192800164913.jpg
~/jun.2chan.net/b/src/1194189136460.jpg
~/jun.2chan.net/b/src/1194189137115.jpg
-------------------------------------------------------------------------------
~/jun.2chan.net/b/src/1192800164913.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1192800164913.jpgを削除しました。
~/jun.2chan.net/b/src/1194189136460.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1194189136460.jpgを削除しました。
↑同一として列挙されたパスの残りが1になると削除せず次へ
701:login:Penguin
08/02/25 17:00:46 ATO0A7OZ
>>700
そこまで行くとシェルスクリプトには荷が重いんじゃないか?
702:login:Penguin
08/02/25 17:10:48 fTf5K0mT
>>701
以下の点でハードルがあがってるみたいですね
・一致したファイルのグループ分け
・ファイルを一つだけ残して削除した場合、残りの1ファイルは削除しない
列挙した全ファイルに対して、質問→削除というのは簡単にいけそうな感じ。
自分の知識だけで無理と判断して投げるのはアレだと思ったんだけど、やっぱ難しいかなあ
703:login:Penguin
08/02/25 18:09:02 pu40lUxS
#!/bin/bash
# askdelete.sh -- find . | finddup.sh | askdelete.sh
# よくテストされてませんので注意
TMPF=`mktemp /tmp/askdelete.XXXXXX`
trap 'rm $TMPF' 0
CURHASH=
COUNT=0
(cat; echo DUMMYHASH /dev/null) |
while read -r HASH FILENAME; do
if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then
echo "------------------------------"
echo "$COUNT 件の一致ファイル:$CURHASH"
tail -n $COUNT $TMPF | cut -b 33-
echo "------------------------------"
tail -n $COUNT $TMPF | while read -r HASH FILENAME; do
[ $COUNT -eq 1 ] && break
echo -n "$FILENAME を削除しますか? [yN] "
while read ANSWER
do
case "$ANSWER" in
[yY]) echo rm "$FILENAME"
COUNT=`expr $COUNT - 1` ;;
esac
done < <(head -1 /dev/tty)
done
COUNT=0
fi
echo $HASH $FILENAME >>$TMPF
CURHASH=$HASH
COUNT=`expr $COUNT + 1`
done
704:login:Penguin
08/02/25 18:12:29 pu40lUxS
done < <(head -1 /dev/tty) とか、絶対おかしいよこれ。
違う言語で書き直したほうがいい。
705:login:Penguin
08/02/25 18:17:46 fTf5K0mT
おおすげええΣ
ちょっとテストしてみます!
706:login:Penguin
08/02/25 19:20:15 pu40lUxS
#!/bin/sh
# askdelete.sh -- find . | finddup.sh | askdelete.sh
TMPF=`mktemp /tmp/askdelete.XXXXXX`
trap 'rm -f $TMPF' 0 1 2 3 15
CURHASH=
COUNT=0
(cat; echo DUMMYHASH /dev/null) |
while read -r HASH FILENAME; do
if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then
echo "------------------------------"
echo "$COUNT 件の一致ファイル:$CURHASH"
tail -n $COUNT $TMPF
echo "------------------------------"
tail -n $COUNT $TMPF | while read -r FILENAME; do
[ $COUNT -eq 1 ] && break
echo -n "$FILENAME を削除しますか? [yN] "
while read ANSWER; do
case "$ANSWER" in
[yY]) echo rm "$FILENAME"
COUNT=`expr $COUNT - 1` ;;
esac
break
done < /dev/tty
done
COUNT=0
fi
echo $FILENAME >>$TMPF
CURHASH=$HASH
COUNT=`expr $COUNT + 1`
done
すこしよくなった
参考になる URLリンク(www.nurs.or.jp)
707:login:Penguin
08/02/25 20:58:36 NDOa2UbC
理想的な流れだ。
708:login:Penguin
08/02/26 01:26:57 Knz7qJ2h
>>706
サブシェルをわざわざ使う必要は無いのでは?
--- (cat; echo DUMMYHASH /dev/null) |
+++ { cat; echo DUMMYHASH /dev/null; } |
709:login:Penguin
08/02/26 01:31:17 V2S90oTo
こんなのじゃ駄目?
find . -type f -print | xargs md5sum | sort | while read i
do
set -- $i
test -e .$1 && rm -i $2
touch .$1
done
削除して残りが1つなら消さずに次、ということは最初の1つは
無条件で残して、2つ目以降についてのみ rm -i で削除確認すれば
いいんだよね?
記憶用に .<md5sum> なマーカ作ってるけど、ここは md5sum な
ダミー環境変数の方がいいかも。
710:login:Penguin
08/02/26 08:30:35 V4Ca66lJ
>>709
全ファイルにmd5sumしたら遅くならない?
711:login:Penguin
08/02/26 08:46:21 M2OUW+0j
>>708
パイプを使うと結局はサブシェルが起動されるんだから () のほうがわかりやすいと思うよ
712:login:Penguin
08/02/26 09:53:07 jk2VB7eG
>>710
どうせシェルスクリプトなんて使い捨てなんだし
多少遅くてもいいんじゃない?
実行時間の長さより
思いついたことをちゃちゃっと実行できる手軽さが大事でしょ。
713:login:Penguin
08/02/26 10:56:04 V4Ca66lJ
>>712
もっともな意見だと思うが、肝心なことを棚に上げてるな
シェルスクリプトの本質は処理を効率化するための機能なんだから、
手軽に加えて「より早くスマートに処理」できる方がいいだろうよ
どうせ使い捨てとか言い出したら、いつまで経っても遅くて低機能なスクリプトしか書けないぜ?
まあせっかくいい方向で流れてるから、俺も最適化してみるか。
714:login:Penguin
08/02/26 15:09:02 KrvpwwSS
手作業で30分かかる作業を、わずかワンライン5秒で済ます。
どうよ、この快感、すごいよ、俺!!
ただしスクリブト書きに3時間かかるけどなっ!!、
みたいな・・・・
715:login:Penguin
08/02/26 15:18:25 jk2VB7eG
5分で書いて実行時間3分にできればそれでおkだよな。
その作業を200回繰り返さなきゃいけないなら
3時間かけて書いて5秒に短縮してもいいけど、
そういうのはシェルじゃなくて別な言語を使った方がいいと思う。
716:login:Penguin
08/02/26 16:04:42 V4Ca66lJ
>>714
良いスクリプトを早く書けるスキルを養うといった考えはないのかよw
まぁ価値観が違うなら仕方ないが
>>715
言いたいことは分かるし仕事では俺も同じスタンスだ。モトが取れない作業をするのはアホだと思う。
さらに>>1にあるようにPerlやPythonを使ってもいいと書いてあるように、別にシェルスクリプトに固執はしてないさ。
ただID:fTf5K0mTみたいに質問を丸投げせずに分かってないながらも自分で試してみている奴も居るんだから
「どうせ使い捨て」や「パンがなければケーキを」じゃなくて、しっかりした見本を見せてやろうぜw・・・と思ったんだ。
勝手に限界を作っちゃダメさ・・・!
717:login:Penguin
08/02/26 17:08:11 KrvpwwSS
頑張るところが・・・まっいっか。人それぞれだな。
718:login:Penguin
08/02/26 17:30:17 DxWnmOPN
>>717
茶化すだけならWindowsに切り替えてフリーソフトスレにでも行け。
同一ファイル発見ソフトなんていくつもあるから。
自分で作ろうと思わん奴はウザイだけだ。
719:login:Penguin
08/02/26 22:37:31 ecwr7n8r
Windowsに切り替えて同一ファイル発見ソフトを探すってのもこれまた手間だよな
720:login:Penguin
08/02/27 00:57:44 k4ecn/gW
ああそういう意味か。
Linuxならawkでもperlでもpythonでもgccでも大概入ってんだろうになんで
>Windowsに切り替えてフリーソフトスレにでも行け
なのかマジで理解できなかった。
なるほどな、そういう考え方もあるか。これは考えが及ばなかったな。
まぁうちext3だしなぁ。
721:login:Penguin
08/02/27 02:09:44 5Pe1iZtE
>>711
サブシェル一個より分かりやすさを重視、ってのも分かるが
プロセスを fork するコストはバカにできないぞ。
たった 10 回でもこれだけ差が出る。
$ time for i in 0 1 2 3 4 5 6 7 8 9 ; do { :; } ; done
real 0m0.001s
user 0m0.010s
sys 0m0.000s
$ time for i in 0 1 2 3 4 5 6 7 8 9 ; do ( :; ) ; done
real 0m0.221s
user 0m0.140s
sys 0m0.140s
今回のはともかく、ループの中で無駄なサブシェル起こすと
かなり処理速度に効いてくるから、「より早くスマートに処理」を
目指すなら気にした方がいいと思うよ。
722:login:Penguin
08/02/27 12:04:07 5xPFitgJ
>>721
そうじゃなくて、パイプではサブシェルが起動されるでしょう?
$ { FOO=foo; echo $FOO; } | cat
foo
$ echo $FOO
$
723:login:Penguin
08/02/27 23:04:12 6K2aGQ5h
>>722
popenってfork & execvじゃなかったっけ?
724:login:Penguin
08/02/28 01:04:44 2c894vLr
$cat a001
abc
$cat a002
def
$cat a003
ghi
という内容の連番ファイルがあるときに、
a001,a002,a003ファイルそれぞれの先頭に
自身のファイル名を追記していくにはどのようにすればいいでしょうか?
$cat a001
a001
abc
$cat a002
a002
def
$cat a003
a003
ghi
725:login:Penguin
08/02/28 01:27:48 k7I0oIXn
for a in *; do
echo $a > temp
cat $a >> temp
mv temp $a
done
726:login:Penguin
08/02/28 01:53:39 2c894vLr
>>725
できましたありがとうございます!!
727:login:Penguin
08/02/28 11:40:05 xnWdeCI1
csvの編集をしているのですがカンマを含むデータがある場合に特定の列を削除するいい方法はないでしょうか?
例:
編集前) aaa,bbb,"ccc,ddd","eee",ff
編集後) aaa,"ccc,ddd",ff
カンマを含むデータは必ずダブルクォーテーションで囲まれているのですが
どの列にカンマを含むデータが存在するかは不明です。
192の方法だと特定の列は出せるのですが、複数列を表示することができないので。。。
728:login:Penguin
08/02/28 11:45:53 sfXUxgeO
>>727
シェルスクリプトでがんばるより↓あたり使ったら?
URLリンク(blog.livedoor.jp)
729:login:Penguin
08/02/28 12:17:28 DWKM9TyE
>>727
無駄にがんばってみた。PerlとかSQLiteとか使った方が絶対いい。
#!/usr/bin/awk -f
BEGIN {OFS=",";}
function csplit(s,a,c,f,i,j,k){delete a;for(i=j=1;;i++){
c=substr(s,i,1);if(c==""){a[k++]=substr(s,j,i-j);break;}
else if(c=="\""){if(f>0){if("\""==substr(s,i+1,1))i++;
else f=0;}else f=1;}else if(c==","&&f==0){a[k++]=substr(s,
j,i-j);j=i+1;}}return k;}
{n=csplit($0,array);print array[0],array[2],array[4];}
730:login:Penguin
08/02/28 20:37:03 VzdvBwjj
吐きそうだ。
字下げを知らないやつがまだこの世にいたのか。
731:login:Penguin
08/02/28 20:53:53 k7I0oIXn
>>730
じゃあお手本をちょっと見せてくれ
732:login:Penguin
08/02/28 22:39:21 VzdvBwjj
死ぬまで>>729記法で頑張りゃいいんじゃね?
それも個性だ。
733:login:Penguin
08/02/28 22:40:23 gxJgMbC8
敗北宣言はええ
734:login:Penguin
08/02/29 00:47:32 1XKkNNaQ
2ch に貼る時気をつけないと空白スペース詰められちゃうよね
735:login:Penguin
08/02/29 01:30:01 Pgw8LnNi
そこで&nbsp;
736:login:Penguin
08/02/29 01:41:57 bnE90VmD
行末にタブがある行を検索しようと
egrep '\t$'
としてもマッチしません。awkだと
awk '/\t$/'
でマッチするのですが、grepだとどう書けばいいのでしょうか?
737:login:Penguin
08/02/29 01:59:08 Pf9U77bc
元々、\tなどのメタキャラクタはgrepにもawkにもなかった。
GNU awkがPerlの影響を受けて拡張しただけ。
738:login:Penguin
08/02/29 02:10:07 bnE90VmD
そうなのかー・・・ちょっとしょぼーん。拡張されてもいい感じなんだけどね。
grep sed awk ぐらい正規表現は統一して欲しかったorz
739:login:Penguin
08/02/29 08:36:03 qSBWA6nK
タブを¥tと書きたかった理由が
シェルからコマンドラインにタブを打とうとして補完機能に取られるから、
であれば、Ctrl-V TAB でたぶんOK。
740:login:Penguin
08/02/29 09:40:38 HrPH8ECW
くだ質からこちらに誘導されたので、こちらで質問させて下さい。
ド素人質問で悪いのですが
$ cat text1.txt
1
2
3
$ cat text2.txt
3
4
5
という二つのファイルがあるとして、それを1行ずつ割り算したいのです。
結果としてこういう形になれば満足です。
$ cat result.txt
0.33
0.50
0.60
どのように記述すれば良いのでしょうか、シェルは普段bashを使っていますが、
もちろんshでも構いません。宜しくお願いします。
741:login:Penguin
08/02/29 09:42:18 /PNY/URb
>>740
ぱっと思いついたもの。
( echo 'scale=2' ; paste -d/ text1.txt text2.txt ) | bc
742:login:Penguin
08/02/29 09:48:46 HrPH8ECW
>>741
早速ありがとう御座います。こんな結果になりました。
.33
.50
.05
(standard_in) 5: parse error
53
4
5
pasteってこういうときにも使えるんですね。
parse errorとかbcとか知らないものも調べてみます。
743:740
08/02/29 09:58:48 HrPH8ECW
>>741
すいませんでした、エラーは自分の不備によるものでした。
きちんと結果表示されたので満足しています。ありがとう御座いました。
744:login:Penguin
08/02/29 10:03:24 Mcdovrgg
スクリプトで2台のDebian間を rcp でコピーしようと思っています。
expect を使って、スクリプトを作成し、それがうまく動作するところまでは
こぎつけたのですけれど、cronに登録すると動かなくなってしまいます。。。。
どうすれば解決するでしょうか?アドバイスをいただけると嬉しいです。
ちなみにスクリプトは
==========================-
#!/bin/sh
expect -c "
set timeout 20
spawn rcp -r {コピー元} {コピー先}
expect sword:\ ; send \"{パスワード}\r\"
"
==============================
こんな感じです。
ご教授のほどよろしくお願いします。
745:login:Penguin
08/02/29 10:04:13 /PNY/URb
>>744
カレントディレクトリがどこになってるのか、とか
権限に問題はないか、とか。
つーか rsync あたり使った方が楽じゃない?
746:login:Penguin
08/02/29 17:16:24 HrPH8ECW
シェルスクリプトでは無いのかもしれませんが、今日2度目の質問をさせて下さい。。
スレ初心者なので、スレ違いだったらすいません。
LPIC試験の勉強のために初めてjoinコマンドを使うのですが、うまくいかず困っています。
1.txtと2.txtに、1~999999の中から任意に500個程度選び出した数字を
それぞれフィールド1に、その他データをフィールド2以降に並べた
テキストファイル(↓こんな感じにソートしたのものです)
$ cat 1.txt $ cat 2.txt
50 aiu 50 abc 1111
80 eoka 140 def 2222
↓ ↓
999999 wawon 531243 xyz 3333
があるのですが、フィールド1に同じ数字が書かれた行を
joinで繋げたいんです。色んなサイトやLPICの勉強本を参考にしたのですが
$ join -1 1 -2 1 1.txt 2.txt
$ join -j 1 1.txt 2.txt
上の2つでは、300個くらいHITするはずなのですが、数個しか出てきません。
全く同じ行に同じ数字がフィールド1に入っているものだけが出力されているようです。
行数が数行しかないファイルではきちんと違う行でも結合してくれるのですが、
行数が多いとjoinでは無理ってことはありますか?
500行くらい処理してくれるものだと思ったんですが・・・泣。
シェルスクリプトでうまくいくのであればヒントを下さい、シェルはbashです。
747:login:Penguin
08/02/29 17:21:26 /PNY/URb
>>746
いまいちやりたいことがわからん。
5行くらいのファイルで例示してみてくれ。
しかし join なんて使ったことないな。
そんなん知らなくても実務ではまったく困らん。
perl かなんかで書く勉強でもした方が役に立つよ。
748:login:Penguin
08/02/29 17:52:51 HrPH8ECW
>>747
初めて学ぶスクリプト言語をシェルスクリプトにしようと決めたところでして、
perlとかは全く知らないんです・・・。ですが実務ではなく趣味なので楽しんでいます。
それと説明が下手ですいません(泣)再度説明させて下さい。
$ cat join1.txt
157 A B
160 C D
1291 I J
1373 K L
$ cat join2.txt
157 C D
160 E F
1373 K L
この2つのファイルをフィールド1個目でくっつけて
$ join -j 1 join1.txt join2.txt
157 A B C D
160 C D E F
1373 K L K L
にしたいんですが(上のファイルだとくっつきました)、各フィールド数が7個
各行数が500行程度、各ファイルサイズは30KBくらいになると、フィールド1個目の
数字が一緒でも、行が1個でもずれているとくっつかなくなり、行が同じものしか結合しなくなりました。
joinの精度が低いのが原因なのだとしたらお手上げなのですが、
何か他の原因は思いつきますでしょうか。perlとかSQLは全く無知なのでシェルで済ませたいんです。
749:746
08/02/29 18:07:44 HrPH8ECW
自己解決したわけではないのですが、やっぱり精度の問題みたいです・・・。
>>748の join1.txt と seq 150 200 > seq1.txt でjoinコマンドを使ってみたら結合できましたが
>>748の join1.txt と seq 1 2000 > seq2.txt でjoinコマンドを使ってみたら1つも結合出来ませんでした。
何か他の工夫で切り抜けたいと思います・・・失礼しました。
750:login:Penguin
08/02/29 21:29:21 d0BiI2Kq
>FILE1 と FILE2 は実行前に join フィールドの昇順にソートしておかなければならない(数値順のソートはだめ)。
だとさ。
751:login:Penguin
08/03/01 06:54:44 +XEPxk54
月に一度、メールログを調べたいのですが、
下記スクリプトを毎月1日朝に走らせています。
---
#!/bin/sh
pre_month_days=`date -d '1 days ago' +%d`
zcat /var/log/maillog.{1..$pre_month_days}.gz | 引き渡し先プログラム
---
これをシェルで走らせると
zcat: /var/log/maillog.{1..29}.gz: No such file or directory
となります。
ですが、
#zcat /var/log/maillog.{1..29}.gz
と手打ちすると、ズシャーっとログが表示されます、エラーも最後まで出ません。
変数展開されていないならまだしも、まったく原因がわかりません。
どういう理由で「No such file or directory」が出るのでしょうか?
752:login:Penguin
08/03/01 07:04:36 5EZ+WSHA
変数が入ってると{}って展開されないんじゃね?
753:login:Penguin
08/03/01 10:33:04 t3ZBWfKh
x=29
echo {1..$x}
してみようぜ。
754:751
08/03/01 17:46:18 IgLZSOLf
>>752-753
{1..29}
・・・ってことは、{1..29}そのものを探す=「No such file or directory」
ってことでしょうか?
ということは、pre_month_daysの文だけfor文で回して、
$temp_textにためていってから、解析プログラムに引き渡すと今思ったのですが、
この$temp_textというのは、シェルスクリプトが終了したときには、
消えてなくなるのでしょうか?どこかに残っているものなのでしょうか?
$temp_textだと、120万行ぐらいあるので、どこかに残っていれば圧迫しかねませんし・・・。
755:751
08/03/01 19:12:07 IgLZSOLf
す、すいません、
bashのfor文ってわけわかりません、( )とか{ }とか使うと思っていたのですが・・・。
zcat /var/log/maillog.$x.gz >> $temp
を繰り返して、
引き渡しプログラム $tempとしたいのですが、
for文(他のやり方もある?)をどう使えばいいのでしょうか?
756:login:Penguin
08/03/01 19:37:33 t3ZBWfKh
for文はCみたく配列を添え字でループするのと違って、
並べた要素1つ1つに対してループするというもの。
for x in 1 2 3 4 5; do
echo $x
done
とかな。
1から先月末日までの日の並びを作るために、Linuxならおそらくseqが使える。
# BSDだとjot
for $x in `seq $pre_month_days`; do
zcat ...$x...
done
とか。
757:login:Penguin
08/03/01 20:11:24 quX+uZMv
bash なら
for (( i = 0; i < 10; i++ )); do
echo $i
done
みたいな C っぽい for 文も使える。
758:751
08/03/01 20:32:55 IgLZSOLf
>>756-757
seqを使ってもエラーが出るので、
Cっぽくやってみました。
aaa.1.txt
aaa.2.txt
aaa.3.txt
を用意して、
------------------
#!/bin/bash
x=3
temp=""
for (( i=1 ; i < $x+1; i++ )); do
cat aaa.$i.txt >> $temp
done
cat $temp
-------------------
./test2.sh: line 5: $temp: ambiguous redirect
./test2.sh: line 5: $temp: ambiguous redirect
./test2.sh: line 5: $temp: ambiguous redirect
マズー(;´Д`)
am・big・u・ous[ mbjus ]
[形]
1 2通り(以上)の解釈を許す
2 (正体の)あいまいな;紛らわしい;はっきりしない, ぼんやりした, もうろうとした, おぼろげな
759:login:Penguin
08/03/01 20:49:48 pGgAUYn5
temp=""
書き込み先がないじゃんか。
temp=nulpo.txt
とか書き込み先がないと。
760:759
08/03/01 21:51:32 IgLZSOLf
い、いけました。
1ヶ月のメールログ1.4GBを食わせることができました。
ありがとうございます。
761:login:Penguin
08/03/01 22:39:09 pGgAUYn5
>>760
最初の>751をよく見てなかったんだけど、maillog.*がそんなに多くない(毎月かならず1~29になっている、てので)なら
for file in `ls /var/log/maillog.*`
do
zcat $file | 処理プログラム
done
でいいのでは。
それと焦って名前欄間違えないように~w
762:760
08/03/01 23:08:45 IgLZSOLf
あぅ、すいません。
logrotateはdailyの120でcompressなんです。
で、月次解析なんで、
その日の前日の「日にち」を取って、
zcatしなくちゃならなかったんです。
でも、これで月次の解析ができます~
763:login:Penguin
08/03/02 03:30:36 b0TlSvfI
いい流れた
764:login:Penguin
08/03/02 22:17:28 eyDRtewQ
>>760
ファイルに落とさない方法もあるぞ
引き渡し先がワンパス処理で無い場合は失敗する可能性
があるのでおすすめ出来ないが...
#!/bin/sh
pre_month_days=`date -d '1 days ago' +%d`
( for i in `seq 1 $pre_month_days` ; do
printf "/var/log/maillog.${i} "
done ) | xargs echo zcat | 引き渡しプログラム
exit $?
##
765:login:Penguin
08/03/03 09:55:39 4ARrqAXS
括弧はいらないね
766:login:Penguin
08/03/03 13:44:09 WtSCj+5U
>>751
eval zcat /var/log/maillog.{1..$pre_month_days}.gz | 引き渡し先プログラム
767:login:Penguin
08/03/03 23:36:12 5ghxiELA
んー
簡単なApacheログ解析&集計用スクリプト組みたいんだけどシェルスクリプトだとパフォーマンス悪いかな?
RubyやPythonは使えないんで、bash系シェルスクリプトかPerlでやってみたいんですが
ちなみにログフォーマットはこんな感じ
mxxxxxx.dynamic.ppp.asahi-net.or.jp - - [27/Feb/2008:15:46:04 +0900] "GET / HTTP/1.1" 200 101323 "URLリンク(hoge.piyo)" "Opera/9.25 (X11; Linux i686; U; ja)"
1リクエストに対して1行記録され、日付毎にファイルがある。(ファイル名の例:access_log_20080227)
465日分で容量2.5GB超とちょっと多いです。
やりたいことは項目別のランキングをテキスト出力だから、スクリプト自体は簡単そう
768:login:Penguin
08/03/03 23:43:14 Zrc2Vdg0
それはanalogとかでできないものでしょうか(´-`)
769:login:Penguin
08/03/03 23:46:01 5ghxiELA
>>768
実はそんな気がしてた
ありがとう('`)~♪
770:login:Penguin
08/03/04 00:34:34 61UoHuE3
ウワー早い
2分ちょいでこれだけ解析できるのかー
ああでも肝心なRefererランキングが出てないわ
Analogスレは4ヶ月近く誰も居ないみたいだしドウシタモンダカー
771:login:Penguin
08/03/04 09:48:48 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
08/03/04 09:54:01 oWYbuV9h
>>771
if grep HTML "$YEAR$MONTH$DAY.csv" >/dev/null; then
echo "HTML file"
else
echo "##################"
fi
773:login:Penguin
08/03/04 14:33:52 kUaxbjJj
>>772
ありがとうございます
教えていただいた通りにやったら問題なくできました
なぜcat|grepのときは上手くできなくて
grepの時は問題なくできるのかがちょっと分からないのですが
いろいろ調べてみようと思います
774:login:Penguin
08/03/04 21:04:44 rsD9V5Zj
HTML) を *HTML*) としてみようぜ。
775:login:Penguin
08/03/04 23:06:20 VrfR3qUe
>>774
やだよ
776:login:Penguin
08/03/05 00:05:43 EV9xTscM
grep -q を使わないのはポータビリティー重視だから?
777:かね ◆CHAS.7AvVo
08/03/05 10:22:08 JQ4a1dor BE:411629928-2BP(158)
>>777ゲット
778:login:Penguin
08/03/10 18:08:47 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
08/03/10 19:47:47 PtxOKuxD
ed
780:login:Penguin
08/03/11 02:26:04 3Mwu+R1S
>>778
スクリプトに慣れた人ならすぐに作れる。
781:login:Penguin
08/03/12 23:51:51 wAPdko8t
>>780
?
782:login:Penguin
08/03/13 22:58:09 A7XLS93G
>>781
!
783:login:Penguin
08/03/13 23:17:56 SoJCaJfU
ああ、無情
784:login:Penguin
08/03/14 00:22:41 XhBWUHl1
シログミガンバレ
785:login:Penguin
08/03/18 03:16:13 TPZ/j5Uw
basenameが第二引数を取ることを今知った。
786:login:Penguin
08/03/20 22:15:42 N/tKbDY7
echo hoge=1で代入、表示両方できる知った件
787:login:Penguin
08/03/21 00:14:20 jeNVffRp
>>786
$ echo hoge=1
hoge=1
$ echo x"$hoge"x
xx
bash 2.05b@debian ではできないぞ。
環境を教えてくれ。
788:login:Penguin
08/03/21 01:11:50 3ULYcj2H
そんなのできたら困る。
789:login:Penguin
08/03/21 01:53:30 Mk2nPfge
>>539
>>537 最近はGUIの環境もシェルと呼んだりするらしいしね.
>ところで,シェルスクリプトをシェルと略す感覚が信じられない
>.せめてスクリプトのほうを残すべきじゃないのか,意味的に…
javascriptをjavaって呼ぶ奴おおいし、むきになんなよ
ちっせーな、何度も何度も
790:login:Penguin
08/03/21 03:00:16 tzWxNirH
>>789
javascriptとjavaだって別物じゃねーか
まったく別の意味にとられる表現は避けるべきだろ。
791:login:Penguin
08/03/21 03:26:20 yp4cACqr
javaの開発と言われて行ってみたら、javascriptの案件だった……
経験者を求めていた筈なので確認をとったら速攻で別案件に回されたけど。
(だれがどこでまちがったのかはしらない。たぶん、えいぎょうのアレがマタやらかしたんだろうけど)
792:login:Penguin
08/03/21 18:28:30 dmCthI0s
>>789
無能丸出しだな。
793:login:Penguin
08/03/22 00:13:19 /5OR7tiw
そうだよね、文字の"あ"を"い"って発音してもいいじゃん?
794:login:Penguin
08/03/22 06:15:29 EkMxwp6R
>>792
頭の構造が粗雑なんだろうね。
しかし無能とは決めつけられないよ。土方としては有能かも知れないじゃないか。
795:login:Penguin
08/03/22 13:14:51 I+OQFn9y
>>794
井の中の蛙、大海を知らず。
796:login:Penguin
08/03/22 14:00:07 4xBJlBA7
javascriptをjavaと呼ぶ井戸の外の世界
797:login:Penguin
08/03/22 14:23:40 79XeAASw
もうすべて「あれ」と「あれ以外の何か」でいいんじゃね?
「この開発にはあれが必要だな」
「そうですね、あれも必要です」
「あれのほうはどうだ」
「あれはあれ以外のあれでやりましょう」
「あれはあれだったからな」
募集要件にはエスパー希望と書けば何も問題ない。
798:login:Penguin
08/03/22 14:25:08 ldkQa/0V
残念なことにハードディスクドライブをハードと略すおっさんを結構見かけるのがリアル世の中なのねん。
javascriptをjavaと呼んじゃうおばちゃん、ねーちゃんだってざらにいるよ。
どっちかというと>>789のほが常識的な気がす
799:login:Penguin
08/03/22 15:16:06 OrPubXKD
>>789
perlスクリプトをPerlと呼んだりPerlでやると言ったり
awkスクリプトをawkと読んだりawkでやると言ったり
それと同じでは
800:login:Penguin
08/03/22 16:27:56 5bvfNtQw
省略したら同種の別の言葉になるかどうかだな。
801:login:Penguin
08/03/22 16:38:49 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
08/03/22 17:33:00 /5OR7tiw
でだ、>>539がシェルスクリプトをシェルと略さずにせめてスクリプトと略しゃ
いいだけじゃねーかと建設的な提案をしたのに、他の軽量プログラミング言語
までもちだし、略した言葉を受け取った人間の能力の問題じゃね?
となるこのスレの流れに、思わず小岩井ミルクコーヒーを噴いた。
>>791の様に読解および対話能力が備わってないと、悲惨な状況のド真中に
パラシュート降下させられる奴がわんさかでそうだ。単語の略し方の問題で。
803:login:Penguin
08/03/22 18:27:12 g5kThUF3
>たしかにシェルとシェルスクリプトは別物だしjavaとjavascripは別物だし、
>>800の言う通り、
シェル・スクリプトをシェルと呼んでも文脈から意味は通じるが、
javascriptをjavaと呼んでしまうと別のものを指してしまう。
混同するな。
804:login:Penguin
08/03/22 19:12:09 //sUM775
WikipediaをWiKiとかね。
805:login:Penguin
08/03/22 19:20:26 ldkQa/0V
では、世の間違いをどこまでも正していってくれ。
思い浮かべて欲しい世の人々は道の傍らでJavaとJavascriptの違いを
切々と説く君たちに聖者が来れり、天国は来れりと歓喜することであろう。
が、まぁ少なくとも営業の彼と経理の彼女、はす向かいの鈴木さんに
今後一切飲みに誘われなくなるのは間違いと思うけどね。
806:login:Penguin
08/03/22 19:26:48 //sUM775
>>805 は啓蒙活動を自粛するようです。
807:login:Penguin
08/03/22 19:39:22 pZoAGsoS
モヒカン族と村人ですから
808:login:Penguin
08/03/22 19:39:41 d90KTFFK
>>805
さっさと氏ね
809:login:Penguin
08/03/22 20:07:27 /5OR7tiw
>>805
AとBは異なるという説明し、その異なりを無視して同一のもととして扱うと
余計なコストが発生するから、次からはきちんと区別してくれという依頼が
出来ない風土、もしくは、意思決定にかかわる情報を扱うやつが説明しても、
その異なりを理解できないなら、そんな会社つぶれるだろ常考。
また、痛いレスみてJavaとJavascriptも区別して話す新入りが入ってきたら、
それこそ大迷惑だ。
>>791のえいぎょうのアレは赤っ恥ですめばいいけど。発注元からみると、
大丈夫かこの営業さんと思ったに違いない。
という燃料を補給してみた。
810:login:Penguin
08/03/22 20:29:32 ldkQa/0V
まぁ派遣は大変だよな。ガンガレ。
811:login:Penguin
08/03/22 21:23:56 I+OQFn9y
>>797
つまり春奈と偽春奈で仕事をすると。
812:login:Penguin
08/03/22 21:25:26 ldkQa/0V
>>810だが、今見たら言い方が悪かった。なんだか煽っているようにもとれるかもな。
すまんかった。そういう意味じゃなくて、今時、派遣ぽい職場の人は技術職まで
そんな感じになってきて大変だと思う。漏れにも似たような経験あるからさ、
マジ、ガンがって欲しいと思ってる。
言われたのと行った先で条件が違うなんてのはちょくちょくあって
アホな会社にも言えなくて当人が泣きをみてしまうつーのは辛いよな。
やる気ならなんとかユニオンとかそっちに話をもってくしかないわけだが
自分の身を守るのが第一かと思うよ。
まぁここでそんなこと言っててもしょうがないわけで、そういう言い方になった。
813:login:Penguin
08/03/24 00:53:04 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
08/03/24 01:03:25 zratqhRJ
プログラミングの基礎を学べば余裕でできると思うよ
815:login:Penguin
08/03/24 01:09:16 1V6v3lmW
実は漏れは結局Cでやったんだけどね。シェルで簡単にやるにはどうするの?
816:login:Penguin
08/03/24 01:11:56 BAIAfq4T
rename や mmv を使うかな。
817:login:Penguin
08/03/24 01:16:04 eiDHSNtl
perl版renameで
rename '/\d+/ and $_=sprintf(q{ero-pic%06d.jpg}, $&);' お宝画像*.jpg
とか?
818:login:Penguin
08/03/24 01:23:02 RkCnK2Rz
ls > file_list.txt して中身を
mv "お宝画像(1).jpg" "ero-pic00001.jpg" とかに変えて
sh file_list.txt
するかな
819:login:Penguin
08/03/24 02:17:54 QVIn50Y1
>>816
mmvというのは? うちにはないみたいだけど。
>>817
perl版renameというのは普通のrenameとは違いますよね?多分。
>>818
基本的にはその方法を用いましたが、
> mv "お宝画像(1).jpg" "ero-pic00001.jpg" とかに変えて
ここがエディタでも番号を取り出す文字列操作を伴うマクロかなにかを使う必要があるわけです。
10000行以上あるので手動では無理ですし。私はCでやりましたが。
やっぱそもそも結構めんどくさいことだったんですかね。
なんか簡単そうな感じはするんだけど。
820:login:Penguin
08/03/24 02:39:44 sKYr6YWg
Perl版renameといえばラクダ本に載っている正規表現でリネームパターンを
指定できるスクリプト(使い方は>>817)のこと。
821:login:Penguin
08/03/24 02:44:18 xdVA6Pwk
>>820 導入するには?
822:login:Penguin
08/03/24 02:50:59 RkCnK2Rz
>>819
でも、正規表現使ったら5回くらいの置換でいけるから、
それでやっちゃうなぁ。俺だったら
vi で
:%s/.*\(.[0-9]\).*/ero-pic0000\1.jpg/gc
:%s/.*\(.[0-9]{2}\).*/ero-pic000\1.jpg/gc
みたいな感じで
自信ないけど
823:login:Penguin
08/03/24 02:56:32 NZTM56J5
>>822
> :%s/.*\(.[0-9]{2}\).*/ero-pic000\1.jpg/gc
これダメっぽいような?
あと「お宝動画」は例えばの例でどうかわかんないけど
日本語大丈夫かしら?
824:login:Penguin
08/03/24 02:57:54 BAIAfq4T
perl-rename のGTK版見付けた。
gprename
しかしprel-renameみつからない・・・
825:login:Penguin
08/03/24 03:00:27 BAIAfq4T
って ubuntu のrenameはprenameだった。
826:login:Penguin
08/03/24 03:07:10 NZTM56J5
>>824
さんきゅ。これ?
URLリンク(sourceforge.net)
あとひょっとしてPerl版renameって
$ perl -e '{ rename "old-filename", "new-filename";}'
みたいな話なのだろうか?(↑はちゃんと動くようだけど)
827:login:Penguin
08/03/24 03:08:54 eiDHSNtl
debianのperlのパッケージに標準で含まれてるのよ
828:login:Penguin
08/03/24 03:17:40 /I27eUR4
今思いついたのだが、ひょっとしてスクリプトで
#!/usr/bin/perl
rename old-filename, new-filename;
みたいな話とか?なるほどそれならいけそだけど。
829:login:Penguin
08/03/24 03:20:03 sKYr6YWg
Perl版renameはこんな感じのスクリプト
$op = shift;
foreach (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was, $_) unless $was eq $_;
}
830:login:Penguin
08/03/24 04:12:10 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
08/03/24 06:30:29 bi7lOxG6
zshだが許せ。
for n in {1..100073}; mv お宝画像($n).jpg ero-pic`printf %06d $n`.jpg
832:login:Penguin
08/03/24 10:57:24 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
08/03/24 10:57:58 62iD1Dht
>>831
zshって便利そうだね。
834:login:Penguin
08/03/24 22:35:08 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
08/03/24 23:31:47 If29/JKD
>>798
なんて頭の悪い…
836:login:Penguin
08/03/24 23:35:42 If29/JKD
>>819
> perl版renameというのは普通のrenameとは違いますよね?多分。
renameがperl版renameじゃないUNIX類って具体的には何があります?
UNIX類じゃないけど、VMSはそうでした。
837:login:Penguin
08/03/25 00:24:28 FMsixLid
>>832
> 日本語が混じるとためかな。あとかっことか。
括弧の方だな。すまん。クォートするなりしてやってくれ。
838:login:Penguin
08/03/25 00:44:35 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
08/03/25 00:50:23 6V9ksjI9
>>836
util-linux に入ってるよ。
840:login:Penguin
08/03/25 00:56:57 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
08/03/25 01:44:34 Mm1m5DLO
>>840
古典的なLinuxというより一般的な普通のLinuxはそうだろうな。
Here C Version.のほうな。
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
debianのrenameは/usr/bin/prenameへのリンクで
prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト
つーのが真相らしい。perl版renameはdebianの方言つーことだわな。困ったもんだね。
842:login:Penguin
08/03/25 01:51:01 uIxNik7B
それ自身はポータブルなPerlスクリプトだから
もし使いたかったら$HOME/binあたりに突っ込めばいいんじゃない
843:login:Penguin
08/03/25 02:00:22 +i6zdHek
>>813
ls -1 ero_dir | sort | ruby -nle 'printf "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh
844:login:Penguin
08/03/25 02:03:33 +i6zdHek
訂正orz
ls -1 ero_dir | ruby -nle 'print "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh
845:login:Penguin
08/03/25 02:05:27 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
08/03/25 03:45:05 mfggD9uB
ラクダ本のだってのはだいぶ上の方で言及されとるがな。
847:login:Penguin
08/03/25 06:52:15 Mm1m5DLO
>>845
prenameは Debian のパッケージメンテナが独自に
「the perl source(perlのオルジナルセット、いわゆるラクダ本)」から
パッケージ生成時に追加したスクリプト、つーことですね。
/usr/bin/renameがC版の代わりにこれで置き換えて拡張してあるのが
debianの方言ということで。
実はラクダ本のやつは見たことがあるな。
848:login:Penguin
08/03/25 17:01:59 7L4Qk+Sn
・>>840にある元のシェルスクリプトはsed版正規表現を理解する
・Here a C versionは正規表現を全く理解しない
・perl版はperl版正規表現を理解する
というわけでLinuxでも三種類あるんですね。
849:login:Penguin
08/03/25 17:59:25 Mm1m5DLO
こういう微妙な違いってひょっとするとトリごとに結構あるのかもしれないね。
スレからはずれるけど、apache/httpdのコンフィグがバージョン系列は
一緒なのにDebian系(ubuntuも)とRH系(RedHat/Fedora/CentOS)で
まるっきり違ってて面くらったことがある。
850:login:Penguin
08/03/25 18:02:21 IQ4Jbr/0
コマンドなんかもちょっと違うくらいだから、設定ファイルの書き方なんて違っていて当たり前。
851:login:Penguin
08/03/26 21:17:50 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
08/03/26 21:52:30 f9ufLLgD
よくわからんけど tree -dA じゃダメなの?
853:851
08/03/26 22:04:51 B6BxqxUi
そういうコマンドがあるのは知ってるのですが
# which tree
/usr/bin/which: no tree
残念なことに入ってないんです。
いろいろ調べまわった結果がこれなんです。
もう少し自分でも調べてきます。
854:login:Penguin
08/03/26 22:31:33 f9ufLLgD
そうかtreeのないトリもあるのか。
855:login:Penguin
08/03/26 23:21:22 5Znd97qm
yumとかaptで入れられないっけ?
856:login:Penguin
08/03/27 00:04:09 ZXE2f6WU
>>853
PATH が通ってないだけとか。locate 辺りで調べてみたら?
他に何かあったっけ>探す方法
857:851
08/03/27 00:35:50 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
08/03/27 01:47:43 nVTK+35Z
>>857
> 下記のシェルスクリプト
ちょっとマテ
859:login:Penguin
08/03/27 04:19:25 LOwKjqa0
どう見てもシェルスクリプトでなくPerlスクリプトだなw
ちなみに、鳥は何なの?
860:851
08/03/27 19:23:00 yDbPGpUf
あ、確かにperlスクリプトですねw
ちなみに鳥はCentOS4.6で、サーバー構築の勉強用で使ってます。
最小構成でインストールしたからtreeコマンドが入って無かったのかもしれないです。
861:login:Penguin
08/03/27 19:43:49 ysMS9Gn7
美女の現われるスクリプトを教えて下さい。
862:login:Penguin
08/03/27 19:56:21 ORW3s1IJ
>>861
emerge beautiful_girl
863:login:Penguin
08/03/27 23:51:02 QsCLAAyg
>>851-857
pstreeだと思うんだ・・
864:login:Penguin
08/03/28 00:18:06 jk3nWqNP
>>863 find / だけど?
865:login:Penguin
08/03/28 00:18:55 deyesKz0
>>864
そだったw
866:789
08/03/28 01:42:56 QgSpL7VJ
にやにや
もりあがってんじゃねーかw
867:login:Penguin
08/03/28 01:46:42 deyesKz0
>>866
javascriptをjavaと呼ぶひと、こんばんはw
868:login:Penguin
08/03/28 14:06:32 Z7X2dF3N
cshで質問です。
下記のように変数をperlに渡したいんですが、変数を認識してくれません。
どうすれば良いですか?
set hoge = funi
perl -pe 'print $hoge' file
869:login:Penguin
08/03/28 15:16:41 KjmTtujq
>>868
シングルクォートをダブルクォートに変える
870:login:Penguin
08/03/28 15:47:45 Z7X2dF3N
>>869
ありがとうございます。
試してみましたが、ダメのようです。
setenvで与えると上手く行きましたが、setで出来る方法も知りたいです。
871:login:Penguin
08/03/28 16:04:18 UFHtgKJC
無理。
あえてやるなら
perl -e 'print "'"$hoge"'"'
これはperlに print "funi" という式を渡したに等しい。
872:login:Penguin
08/03/28 17:22:58 Z7X2dF3N
>>871
ありがとうございます。
やってみたら出来ました。
意味は分かんないのでこれから調べてみようと思います。
873:login:Penguin
08/03/28 17:26:00 s6QtoqP9
csh じゃなきゃいかんの?
sh 系で書いた方がいいんじゃない?
874:login:Penguin
08/03/29 22:39:26 Je2/7f5V
リダイレクト 「>&-」 (ディスクリプタ番号に 「-」 を指定した場合) の振舞いについて記述している manpage を探しています。
(manpage でなくともそれに準ずる文書であれば構いません)
JM Project の bash(1) などや google で検索してみたのですが見つかりません。
>&- を使用しているシェルスクリプトは見つかりましたが、そこには正式な説明はありませんでした。
google って記号検索がとても弱いようなので シェルスクリプトとか GAME言語みたいな記号で頑張るタイプのを探すのは大変。
何か効果的な検索技があるんですかね。
875:login:Penguin
08/03/29 22:48:22 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
08/03/29 22:53:17 z7EKOxA5
>>875
for i in {0..9}; do printf "%03d\n" ${i}; done
877:login:Penguin
08/03/29 22:57:09 ZodWq0Ht
printfが嫌なら echo "000$i" | sed 's/0*¥(...¥)$/¥1/'
878:874
08/03/29 23:01:58 Je2/7f5V
すみません。事故解決しました。 JM Project の bash(1) に記述されてました。
879:875
08/03/29 23:02:33 6BdICwv7
>>876-877
凄まじくソッコーのレス ありがとうございます。
形式を指定してるってことくらいは分かりました。
調べてきます!
ありがとございました。
880:login:Penguin
08/03/29 23:06:18 z7EKOxA5
>>875
単純に、必要な個数の名前のリストがありゃいいだけなら、
これでもいいと思う。
seq -f "moe_ero_guro_%03g.png" 0 9
881:login:Penguin
08/03/29 23:16:52 U1N+QPd9
>>876
{0..9} は bash3 じゃないと動かないはず。
まだ bash 2.05b の環境ってけっこうあるよね?
882:login:Penguin
08/03/29 23:19:47 ZodWq0Ht
seqは、あーここLinux板だからまず間違いなく入ってるな。
883:login:Penguin
08/03/29 23:23:13 ZodWq0Ht
seqだととびとびの値とかも作れるんだが、
単に連番がつくりたいとき個人的によくやるのは
yes '' | cat -n | sed 100q
とか。
884:login:Penguin
08/03/29 23:30:36 WiwCN3W0
seqって便利だね。知らんかった。
seq -f %03g 1 100
885:login:Penguin
08/03/29 23:33:55 z7EKOxA5
>>881
聞かれたから一応、答えておこう。そんな環境は知らん。
bash 2.05bなのはRHEL3かVineか、2005年ぐらいで閉鎖空間へ移行したやつだけだろ。
886:login:Penguin
08/03/29 23:36:52 WiwCN3W0
そうなのか。ある意味Vine恐るべしだな。
887:874
08/03/29 23:41:18 Je2/7f5V
組込系だったりすると bash どころか busybox ん中の sh (ash) だったりもする。
La Fonera の seq は -f オプションなんか無いので
printf "%03d\n" `seq 1 10`
888:login:Penguin
08/03/30 00:08:49 36hI9fyL
この仕様は初めて知ったw
$ printf "%03d%03d\n" 1 2 3 4 5
001002
003004
005000
889:login:Penguin
08/03/30 00:34:47 91o/3wOF
おまいらのseq には -w ってオプション無いの?
seq -w 1 100
890:874
08/03/30 00:48:35 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
08/03/30 15:18:36 AAKkqqTb
拡張子の変換ってどうやってる?俺は
for f in *.hoge; do
mv $f ${f%.hoge}.fuga
done
っていちいち打ち込んでるんだけど、なんかいい方法ない?
892:login:Penguin
08/03/30 16:16:42 SBrBro/C
>>891
過去ログ読め。
893:login:Penguin
08/04/01 00:07:30 mTzNKv6N
ニコ動の動画IDをwgetで落とせる直リンに変換するスクリプトないっすか?
894:login:Penguin
08/04/01 00:12:45 +SHNTduy
>>893
仕様出てるだろ。
895:login:Penguin
08/04/01 00:12:57 bWFHq2/G
>>893
nicovideo-dl
896:login:Penguin
08/04/01 22:06:47 Mk5CpRwr
$ oppai
bash: oppai: command not found
897:login:Penguin
08/04/04 13:09:23 Lie/X+/S
質問させて下さい。
ubuntu7.1 server を使用しています。
シェルスクリプトを勉強し始めてLinuxの設定セットアップシェルを作ろうとしています。
■入力受付状態を省略し、自動入力にするにはどのようにすればいいのでしょうか?
例えばsambaのコマンドですが
smbpasswd -a root
をするとパスワードの入力を求められます。
普段なら手動でxxxxと入力するのですが、この作業を自動化したいのです。
色々調べてsedの使い方等はわかりファイルの書き換えによる設定はおおむね出来たのですが
上記のやり方は見つけることができませんでした。
どうかアドバイス頂けないでしょうか?
宜しくお願い致します。
898:login:Penguin
08/04/04 21:25:51 WDSwmhLm
>>897
Windowsから接続しているなら、TeraTermのマクロで何とかできるかもね。
ただユーザー名やパスワードが見えてしまう状態でファイルに保存するから
セキュリティ上には良くないかも
sambaの設定ファイルだけバックアップ取って
ユーザーとパスワードはその都度入力するのが無難かと
899:login:Penguin
08/04/05 11:09:58 co3/wC9l
>>897
expectスクリプト
expectに突いてくるサンプルを読んで
900:login:Penguin
08/04/05 11:16:23 co3/wC9l
すまん、サンプルついてないわ。
apt-get source expect
して、サンプル見て。
901:login:Penguin
08/04/06 14:52:52 20te6qz4
シェルスクリプトできるけどPerlスクリプト出来ないやつなんなの?
902:login:Penguin
08/04/06 15:42:41 6d0Si0sC
単にawkとかpythonが好きなんじゃないの?
903:login:Penguin
08/04/06 17:08:40 Y81bdbYI
>>901
シェル・スクリプトは基本だが、perl は awk やら python やらのワン・オブ・ゼムに過ぎないので、それが普通。
MS-Windows95の頃、cgiはperlスクリプトでという謎の風潮があった名残で、あなたのような疑問が出て来るのだろう。
904:login:Penguin
08/04/07 02:13:58 WGY+O99D
>>903
そうそう。
別に、cgiがシェルスクリプトでも問題ないし(使いにくいけど)、なんでもいい。
perlだろうが難だろうが、所詮手段なんだから、どうでもいいじゃんw
905:login:Penguin
08/04/07 08:01:37 DKzh8iuy
>>901
多分、
同じ構造化手続き型言語なのに何で方言によって使える使えないみたいなこと言ってんの?
ということかと。
906:login:Penguin
08/04/07 20:27:53 ky4RCRjO
>>905
そうなら「シェル」スクリプトスレで何言ってんだこのバカは?
ってな話しにしかならんからそれはなかろ。
907:login:Penguin
08/04/08 00:22:25 xWC78uSv
つまり、シェルスクリプターはアホです。
908:login:Penguin
08/04/08 21:18:54 mlftshp4
Aho氏
URLリンク(en.wikipedia.org)
909:login:Penguin
08/04/08 21:20:29 L1HkWImv
ahoさんはawkの偉い人でしょ
910:login:Penguin
08/04/09 01:18:06 8anDW64k
フィンランドではよくある名字。
911:login:Penguin
08/04/09 01:40:20 vyKS0pT6
えっほ
912:login:Penguin
08/04/09 02:03:59 JRgbXb6K
スキーでアホネンさんっていたな
この人もフィンランドだったな
913:login:Penguin
08/04/09 13:12:39 vyKS0pT6
だれがあほやねん!
914:login:Penguin
08/04/09 18:16:40 pjxRKuKN
>>911,913
しょーもないレスして悲しくなってこないか?
915:login:Penguin
08/04/09 19:47:59 D07VbGXN
$ shoumo
bash: shoumo: command not found
916:login:Penguin
08/04/09 21:12:29 HudBzGNB
$ which show
/usr/local/mh/bin/show
なんていう時代もありました。
917:login:Penguin
08/04/11 16:25:19 3vnovWPW
000から999までリストを作りたいんですが、どうすればいいでしょう?
918:login:Penguin
08/04/11 16:30:16 p4V9vMAs
seq -w 0 999
919:login:Penguin
08/04/11 16:38:37 3vnovWPW
>>918
めちゃくちゃありがとうございます!!!
920:login:Penguin
08/04/11 16:41:55 h4xwic1O
最近の bash なら
echo 00{0..9} 0{10..99} {100..999}
zsh なら
echo {000..999}
921:login:Penguin
08/04/13 00:08:59 C50QhsEF
端末に他の端末から書き込むようなデーモンとクライアントが欲しいです
例として、mltermとurxvtを立ちあげ、
mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら
mltermの画面にaaaとか表示されるようなものです
同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…
922:login:Penguin
08/04/13 00:37:03 tBy+WuAg
適当なログファイルに書き出して、端末の方にはtail -f (tailf)で流せば
923:login:Penguin
08/04/13 08:41:28 LTuSsBD0
端末A $ echo 'term A' > /dev/console
端末B $ echo 'term B' > /dev/console
に類したことは、まれにやる。
924:login:Penguin
08/04/13 09:11:42 DHms7wov
>>921
mlterm$ screen
urxvt$ screen -x
925:login:Penguin
08/04/13 09:16:44 DHms7wov
つ ttysnoop
926:login:Penguin
08/04/13 10:23:50 +bcR3tRW
>>921
wall
927:login:Penguin
08/04/13 15:29:10 7nxEkg5V
>>924
それは違うんじゃね?
928:login:Penguin
08/04/14 21:52:01 yIAGZ+M9
rm -rf /*
┐('~`;)┌ モウツカレタ
929:login:Penguin
08/04/15 07:03:22 KF+FiULr
dd if=/dev/zero of=/dev/hda
930:login:Penguin
08/04/18 07:50:33 9axeonkq
運用しているマシンでちょっとした作業を行うとき、
nice bash したシェルで作業することがあるのですが、
いま自分が動かしているシェルの nice 値を簡単に
知る方法ってないですかね・・・
931:login:Penguin
08/04/18 08:23:44 JZJIXmIH
$ ps -o %n $$
そんなことも知らない人がniceするの?
それに対話型のコマンドにniceはあまり意味がない。
932:login:Penguin
08/04/18 09:08:39 9axeonkq
その中でmakeしまくるので
933:login:Penguin
08/04/18 09:57:57 JZJIXmIH
alias make='nice --adjustment=-30 make'
934:login:Penguin
08/04/18 11:45:33 u356hJZU
reniceじゃダメなんでしょうか?
935:login:Penguin
08/04/18 20:06:00 xUbq9+ce
alias nice='ジャズ + クラシック / ロック'
936:login:Penguin
08/04/18 23:11:33 cOa8NbkQ
nice boat.
937:login:Penguin
08/04/19 13:43:25 khf4hkQE
>>934
>reniceじゃダメなんでしょうか?
topでもいいよな。
938:login:Penguin
08/04/19 16:17:44 SCXXqtIf
bashのシェルスクリプトで、
文字列に正規表現のフィルタをかけたいのですが
以下の場合、なぜエラーになるかわかりません。
何が悪いですか?
expr `ps` : ".*"
-> expr: syntax error
var1="aaa"
expr $var1 : ".*"
-> expr: syntax error
939:login:Penguin
08/04/19 18:02:41 XPjpMm+j
expr "`ps`" : ".*"
var1="aaa"
expr "$var1" : ".*"
940:login:Penguin
08/04/19 20:46:24 SCXXqtIf
>>939
それで出来ました。ありがとうございます。
でも理由がいまいちわかりません。
” ”で囲っていない為 → 文字列型ではない為 → では$var1は何を返すのか?
941:login:Penguin
08/04/19 21:02:50 SyasDtFa
hdやbdみたいに 2進数表示するプログラムありませんか?
942:login:Penguin
08/04/19 22:41:34 QZlXANdf
>>941
od
943:login:Penguin
08/04/19 22:50:17 SyasDtFa
odだと2進数は表示ですう。
もう自分で作っちゃいました・
944:login:Penguin
08/04/20 10:43:22 C3cqRfnQ
>>940
>” ”で囲っていない為 → 文字列型ではない為 → では$va
>r1は何を返すのか?
確かに、おれも気になるぞ
945:login:Penguin
08/04/20 13:49:25 yhaYk8sL
なんというか、このスレで話をするための最低限の知識レベルを、>>940や941は遥かに割り込んでいる気がするんだが。
946:login:Penguin
08/04/20 14:55:30 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
08/04/20 17:11:52 oNW0JD98
逆に文字列処理を一通りしてから実行させられるから、
>>938が最初考えていたみたいに単語区切りが強い場合より、
出来ることが増えるんだけどな。
その代わりプログラマがちゃんと構文構成の責任を持たないといけないけども。
948:login:Penguin
08/04/23 22:57:21 xEICV4cP
grepの結果で AAAとBBBのOR検索をしたいのですが、
tail -f /var/log/maillog | grep [AAA|BBB]
とやってもだめでしたorz
どうすれば、OR検索ができるのでしょうか?
ANDは、パイプで追加すれば可能なのですが・・。
949:login:Penguin
08/04/23 23:29:21 Y+58Od8z
なんで tail -f なんてする必要が有るんだ?
950:login:Penguin
08/04/23 23:33:35 M4AkpEZt
>>948
grep -E "(AAA|BBB)" もしくは
egrep "(AAA|BBB)"
951:948
08/04/24 04:44:09 8uaGXJVC
>>950
egrepでしたか、ありがとうございます。
>>949
1秒に100行以上流れるログなので、速すぎて読めないのよねw
952:login:Penguin
08/04/24 09:43:23 C5h8jkbM
一秒に100行以上流れるとか全然関係ないと思うぞ。
953:login:Penguin
08/04/24 10:09:04 iBrwQJHF
そんなにおかしいか?
おれもよくやるけどな。
954:login:Penguin
08/04/24 19:19:48 BuhR71Gk
>>952
logの監視は他にどんな手段でやってるの?
955:login:Penguin
08/04/24 19:42:01 28W2p82+
tail -fしても速く流れるのは変わらないだろ?
大きなファイルの増分だけ見たい時は有効だけど。
956:login:Penguin
08/04/24 19:54:48 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
08/04/24 20:51:49 PIJRHfrL
そんなのは常識。
tail -fするのは、増分を見たいからだろ?
速く流れるのは関係ない。それはgrepの役目。
>>949に対する>>951の答えはおかしい。
それが読み取れない>>953も疑問。
958:login:Penguin
08/04/24 23:00:30 amh/02/G
>>956
基本だよな。それって。
959:login:Penguin
08/04/25 01:12:52 05aUO6OC
役に立たないのは949,952,957のレスだろ
つegrep -v '(949|952|957)'
960:login:Penguin
08/04/26 03:30:44 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
08/04/26 03:41:55 l2xr5sbr
[ $file = *.o ] の * がパス名展開されるから。
こういう時は case 文使うと楽。
case "$file" in
*.o) echo ".o: Name=$file" ;;
*) echo "not .o: Name=$file" ;;
esac
962:960
08/04/26 04:22:04 2buln9M4
>>961
ありがとうございます!
>* がパス名展開される
なるほどです。
今後のためにお聞きしたいのですが、
このままifで処理するには
どのようにしたらよいのでしょうか?
963:login:Penguin
08/04/26 05:02:51 +ITD/myA
expr でパターンマッチさせた結果を判定するのが常套手段だと思う。
でも解り易さで俺も>>961おすすめ。
shでなくbashやzshに依存するやり方で良いなら他にもあるので、manするとエエでがす。
964:960
08/04/26 11:07:16 2buln9M4
>>963
expr、なるほど。
C++やってるときも、caseなんてifがあるから要らね、
とか言ってるのをshにも持ち込んでしまったわけですが、
shではcaseを格上げします。
ありがとうございました。
965:login:Penguin
08/04/26 11:09:05 zBt65CRz
>>964
ざけんな。switchの方がコードの見通しがよくなる場面が多々ある。
適材適所だ。
966:login:Penguin
08/04/27 00:22:17 FoD+QJwV
一文字のみ、小文字を大文字に置換の方法、教えてください
_linux
から
_Linux
へ
(この場合、小文字lを大文字Lへ、一文字のみ)
trとかsedでぐぐってみましたが、すべての文字に適用される例のものばかりで。。。
967:login:Penguin
08/04/27 00:31:12 mG61TWcx
echo _linux | sed -e 's/[a-z]/\U&/'
968:login:Penguin
08/04/27 01:13:49 FoD+QJwV
>>967
ありがとうございます
期待通りの動作になりました、感謝