シェルスクリプト総合@LINUX Part3
■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin
2007/07/10(火) 23:17:13ID:qGthZdMEまあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。
初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。
perlやらPythonやらの話が混ざっても良いんでない?
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc11.2ch.net/test/read.cgi/linux/1154578200/
http://pc8.2ch.net/test/read.cgi/linux/1121994321/
>>2-5あたりに色々と。
0458login:Penguin
2008/01/16(水) 23:55:16ID:KAlEWwYc0459login:Penguin
2008/01/17(木) 01:30:17ID:xe77Y4ah0460login:Penguin
2008/01/17(木) 01:45:37ID:hGbWYs9Cそういうものが必要な処理はシェルじゃなく、ちゃんとそれなりの言語でプログラムしたほうがいいかも。
0461login:Penguin
2008/01/17(木) 09:08:26ID:MJ2pzO6M0462login:Penguin
2008/01/17(木) 09:18:44ID:wcByJn9i| awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.70%
1 10.70%
2 8.60%
3 11.00%
4 10.40%
5 8.90%
6 11.40%
7 9.70%
8 9.80%
9 9.80%
(´・ω・`)
% i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \
| awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.20%
1 12.30%
2 8.60%
3 11.00%
4 11.20%
5 9.30%
6 11.40%
7 7.80%
8 11.40%
9 7.80%
(゚д゚)
0463login:Penguin
2008/01/17(木) 09:28:02ID:wcByJn9i| awk '{hist[int($2/256.0*10)]++} NR==1000{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.80%
1 9.50%
2 10.10%
3 9.80%
4 9.80%
5 9.40%
6 10.20%
7 10.20%
8 10.30%
9 10.90%
(´・ω・`)
% perl -e '$MAX=10;$LOOP=1000000; for (1...$LOOP) {$hist[int(rand()*$MAX)]++}; for (0..$MAX-1) {printf("%2d %4.2f%\n", $_, $hist[$_]/$LOOP*100) }'
0 9.98%
1 9.99%
2 9.99%
3 10.02%
4 10.03%
5 10.02%
6 9.92%
7 10.00%
8 10.00%
9 10.04%
(゚∀゚)
date +%Nは、ばらつきはともかく遅いな...
0464login:Penguin
2008/01/17(木) 10:59:36ID:bFGNQCBf0465login:Penguin
2008/01/17(木) 11:37:17ID:LfhUWWyD> 2. bash依存
ksh88由来らしい
tp://www.cs.princeton.edu/~jlk/kornshell/doc/man88.html
ksh互換を期待できるなら使ってもいいんじゃね
0466login:Penguin
2008/01/18(金) 01:58:10ID:S6Zw/ddB0467login:Penguin
2008/01/18(金) 07:42:17ID:YTGcRcKS/usr/gamesってそれ何年前のWSのディレクトリ構成だよ...
0468login:Penguin
2008/01/18(金) 17:40:50ID:wVas3OI30469login:Penguin
2008/01/18(金) 17:50:43ID:YTGcRcKS0470login:Penguin
2008/01/18(金) 22:33:39ID:EJvy1m4kfind (検索ディレクトリ) -type d -printf "%p/\n" -or -print
0471login:Penguin
2008/01/18(金) 22:55:09ID:S6Zw/ddB最新のLinuxの(いやほんと。これだけは伝統的理由で残ってるのかな)
0472login:Penguin
2008/01/18(金) 23:22:22ID:6BHP4h960473login:Penguin
2008/01/19(土) 01:14:55ID:ZLNpfSkQDebian (sid)。まあ bsdgames とかまんまレガシーなパッケージだけだけどね。
0474login:Penguin
2008/01/19(土) 05:58:20ID:JWtUz7T2中みたらbannerとfortuneが入ってた。
0475login:Penguin
2008/01/19(土) 08:07:34ID:njld/y5g0476login:Penguin
2008/01/19(土) 17:07:33ID:NuJUp+KH/start.txt内の記載が
12
254
3678
4
59
621
78
896
、、、、、、
と法則性の無い桁数の数字が2000行近くあるものを
/end.txtに
12,254,3678,4
59,621,78,896
、、、、
A,B,C,Dと4項目で1行に変換したいと思っています
start.txtから4行抜き出して end.txtに1行にする考え方でいい方法を教えていただけないでしょうか
よろしくお願いいたします
0477login:Penguin
2008/01/19(土) 18:46:40ID:ZLMZWyE0余りが出たら最後カンマ付きで出力されちゃうけど
0478login:Penguin
2008/01/19(土) 18:55:41ID:NuJUp+KH完璧な物ありがとうございます
今迄sedばかり使っていたのですがawkすごいですね
awkの勉強させていただきます
0479login:Penguin
2008/01/19(土) 18:59:10ID:IrN8xoLtawk '{printf"%s%s",$0,(NR%4?",":"\n")}' < start.txt
0480login:Penguin
2008/01/19(土) 19:02:55ID:NuJUp+KHありがとうございました
とても参考になります
0481login:Penguin
2008/01/19(土) 19:43:02ID:rxOILVvfq94J↓q10000@9
:%s/ /,/g
:w end.txt
0482login:Penguin
2008/01/19(土) 19:59:13ID:58USgOmqDebianではゲームの実行バイナリは/usr/gamesに置かれるぜ。
最近はポリシーチェッカも警告を出すようになったから、lennyまでには移動完了するんじゃね。
http://lintian.debian.org/reports/Tpackage-section-games-but-contains-no-game.html
http://lintian.debian.org/reports/Tpackage-section-games-but-has-usr-bin.html
0483login:Penguin
2008/01/19(土) 21:00:37ID:ZLNpfSkQなんでだろうね?
FHS誤解してたかと読み直したらそんなことないし。理由がわからん。
0484login:Penguin
2008/01/19(土) 21:04:24ID:ZLNpfSkQAs described in the FHS, binaries of games should be installed in the directory /usr/games.
This also applies to games that use the X Window System.
Manual pages for games (X and non-X games) should be installed in /usr/share/man/man6.
とか書いてあった。FHSをgrepしたら、正式なセクションはないが、optionalとしてgames作っていいと
書いてあった。
0485login:Penguin
2008/01/19(土) 21:14:55ID:Xt/fDApdそういうのが全て悪の元凶。
0486login:Penguin
2008/01/19(土) 22:06:40ID:ZLNpfSkQそれだけでも推進されてしかるべき。
0487login:Penguin
2008/01/20(日) 02:02:52ID:dexE1e0mディトリビュータはゲームなんか提供すんな、ということなのだよ。
つまりゲームを提供しているDebianは人々を堕落させる悪のディストリビュータなのだ!
0488login:Penguin
2008/01/20(日) 02:23:04ID:kH+ebKTAなにその陰謀史観(w
単に /usr/ 直下はディストリの管轄だし自分で決めろ、
一方で /usr/local/* は空フォルダ切っておく以上は認められないから
代わりとして、せめて誘導できるように切っておけ、ということかと。
FHSで自分的に従来慣習と比較して見慣れないのは/srvだな。
どこのUNIXでの慣習だったんだろう?
0489login:Penguin
2008/01/20(日) 02:55:38ID:M1QHfiRt/usr/games/bin/fortune じゃなくて
/usr/games/fortune ってとこじゃなかったのかー
0490login:Penguin
2008/01/20(日) 04:01:16ID:FZKKsnApsed ':b;1~4,+2{N;s/\n/,/;bb}'
sedも心の片隅にでも置いておいてやってくだされ。
0491login:Penguin
2008/01/20(日) 04:20:45ID:IwRos1VB管理者のPATHからゲーム関係を除外するのが目的だろうから
/usr/games/binとサブディレクトリを掘る必要はないんじゃね。
0492login:Penguin
2008/01/21(月) 02:31:10ID:HJiECvMSそんな記法初めて見た…
どうなってんの???
0493login:Penguin
2008/01/21(月) 02:55:10ID:QTxOOwHl0494login:Penguin
2008/01/21(月) 11:41:48ID:JvqHER/Wpaste -d, - - - -
paste も心の片(ry
0495login:Penguin
2008/01/21(月) 14:42:32ID:svPtjQeo$ cat name.txt
name1
name2
name3
name4
name5
$ cat weight.txt
weight1
weight2
weight3
weight4
weight5
このとき、なんとかして
$ ???????????
name1 weight1
name2 weight2
name3 weight3
name4 weight4
name5 weight5
と表示したいのですができません。
最初は
$ cat name.txt weight.txt > data.txt
$ awk '{ if(NR<=5) a[NR]=$0; else b[NR-5]=$0} end{for(i=1;i<=100;i++) printf i,a[i],b[i];}' data.txt
としましたが、空白が表示されるだけでした。
0496login:Penguin
2008/01/21(月) 14:51:31ID:N+zVQlnlpaste
0497login:Penguin
2008/01/21(月) 14:53:35ID:svPtjQeoありがとうございました。
ぐぐるまでもヘルプ読むまでもなく、
適当にいじっただけでそうなりました。
0498login:Penguin
2008/01/22(火) 11:11:17ID:DOTIpHDEgawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt height.txt
ファイル数に制限はない。あと出力される行数は、最後のファイルの行数によって決まってしまうがな。
0499login:Penguin
2008/01/25(金) 13:18:49ID:u9KTnE0i一応予想通りに動いてるようですが問題点や改善点があったら叩いてくだしあ
#!/bin/sh
EXT='.jpeg$|.jpg$|.png$'
LIST=`ls $1 | grep -Ei $EXT`
if [ "$LIST" = '' ] ; then\
echo "No files found in $1."
exit
fi
NUM=`echo $LIST | wc -w`
N=`expr $RANDOM % $NUM + 1`
TARGET=`echo $LIST | cut -d ' ' -f $N`
#echo "$1/$TARGET"
bsetbg $1/$TARGET
0500login:Penguin
2008/01/25(金) 15:41:59ID:5ugSsaO2そのままだと画像ファイル名やパスに空白があると動かないけど、いいのか?
0501login:Penguin
2008/01/25(金) 17:04:10ID:HizVC3Pfimport sys, os, random
def is_image(filename):
EXT = ('jpeg', 'jpg', 'png')
return any(filename.endswith(ext) for ext in EXT)
if sys.argv[1:]:
dir = sys.argv[1]
else:
dir = os.path.curdir
files = filter(is_image, os.listdir(dir))
if not files:
print "No images found in %s" % dir
sys.exit(1)
target = random.choice(files)
os.system("echo bsetbg '%s'" % os.path.join(dir, target))
# 高級言語って素晴らしいね
0502login:Penguin
2008/01/25(金) 17:51:17ID:u9KTnE0i修正してみました
#!/bin/sh
EXT='.jpeg$|.jpg$|.png$'
if [ "$1" = '' ] ; then\
DIR=`pwd`
else\
DIR="$1"
fi
LIST=`ls "$DIR" | grep -Ei "$EXT"`
if [ "$LIST" = '' ] ; then\
echo "No files found in $DIR."
exit
fi
NUM=`echo "$LIST" | wc -w`
N=`expr "$RANDOM % $NUM + 1"`
TARGET=`echo "$LIST" | cut -d ' ' -f "$N"`
#echo "$DIR/$TARGET"
bsetbg "$DIR/$TARGET"
0503login:Penguin
2008/01/25(金) 18:55:56ID:u9KTnE0iexpr はクオートしちゃまずかった
0504login:Penguin
2008/01/26(土) 00:32:05ID:0LMYrtfF#!/bin/bash
DIR=$1
IFS='
'
TARGET=(`find "${DIR:=.}" -maxdepth 1 \( -name '*.[Jj][Pp][Ee][Gg]' -o -name '*.[Jj][Pp][Gg]' -o -name '*.[Pp][Nn][Gg]' \)`)
if [ ${#TARGET[@]} -eq 0 ]; then
echo "No files found in ${DIR:=.}"
exit -1
fi
#echo ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]}
bsetbg ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]}
とか。
0505login:Penguin
2008/01/26(土) 00:54:55ID:a+SvfS+1おまいさんの find には -iname は無いのか?
あと、bash なら自前で算術計算できるよ
bsetbg "${TARGET[RANDOM % ${#TARGET[@]}]}"
0506login:Penguin
2008/01/26(土) 01:31:49ID:Gp61cAWIあ、これは知らんかった。有り難う。
>あと、bash なら自前で算術計算できるよ
こちらは知っていたけど、元ネタに合わせんと。
0507login:Penguin
2008/01/26(土) 11:11:47ID:NixStw3Dfilesize=('du -h ~/file.tmp')
$loglen > ~/filesize.txt
という感じでfile.tmpのファイルサイズを出力したいのですが
出力結果に不要な部分があります。
欲しい部分だけ切り取るには、どうすればいいでしょうか?
よろしくお願いします。
100k /home/user/file.tmp
~~~~~ ~~~~~~~~~~~~~~~~~~~~
↑ ↑
欲しい 要らない部分
0508login:Penguin
2008/01/26(土) 11:20:53ID:NixStw3Dfilesize=('du -h ~/file.tmp')
$filesize > ~/filesize.txt
間違えてしまいました。こんな感じです。
grepで抽出するオプションの書き方も思い付かず
スクリプトで処理するには・・・?と、行き詰まってます。
0509login:Penguin
2008/01/26(土) 11:34:50ID:opXPKDAocut (coreutils)
0510login:Penguin
2008/01/26(土) 11:48:51ID:NixStw3Dヒントありがとうございます。
使い方を調べてみます。
0511login:Penguin
2008/01/26(土) 12:47:23ID:NixStw3Dもう少しヒントをください。
cat と coreutils のどちらかを使うや
cat か coreutilsのどちらかを使うかや
レスの意図を示していただけるとありがたいです。
シェルスクリプト歴数時間で理解が及ばなく申し訳ないです。
0512login:Penguin
2008/01/26(土) 12:52:39ID:K0Rp0izEあと猫じゃなくて切るほうな.
0513login:Penguin
2008/01/26(土) 13:12:20ID:NixStw3D調べてみたのですが、広範囲になってきて混乱してきました。
今のところ
cat -Tというオプションと、rtというコマンドを発見して
コンソール上で
du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "
とすると、ファイル数だけ表示されるようになったので
うまい方法でもないような気もしつつに
#!/bin/sh
filesize=('du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "')
$filesize > ~/filesize.txt
としてみたのですが
$./filesize.sh
↓うまく実行できずに困っています。
du: invalid option -- T
du: invalid option -- |
du: invalid option -- t
du: invalid option -- r
詳しくは `du --help' を実行して下さい.
0514login:Penguin
2008/01/26(土) 13:15:18ID:K0Rp0izE0515login:Penguin
2008/01/26(土) 13:22:31ID:NixStw3Dありがとうございます。
素で間違えていました。
調べてみます。
0516login:Penguin
2008/01/26(土) 13:24:02ID:ShBosd97ではだめなのか
0517login:Penguin
2008/01/26(土) 13:43:18ID:NixStw3D$ du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1
としたらうまくファイルサイズだけ切り出せたので
#!/bin/sh
filesize=('du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1')
$filesize > ~/filesize.txt
と、してみたのですが
なにか基本的な構文がおかしいのでしょうか?
バックスラッシュやシングル、ダブルクォーテーションを試してみましたが回避できません。
↓
du: invalid option -- T
du: invalid option -- |
du: invalid option -- u
du: invalid option -- t
du: invalid option -- d
du: invalid option -- f
詳しくは `du --help' を実行して下さい.
>>516
ヒントありがとうございます。
調べてみます。
0518login:Penguin
2008/01/26(土) 14:22:43ID:/buRKO/4これでいいだろ。
du -h /home/user/file.tmp | awk '{print $1}' > ~/filesize.txt
0519login:Penguin
2008/01/26(土) 16:30:30ID:NixStw3D調べたらawkは強力で、いろいろ使えそうです。
出力も当初の予定通りで完璧でした。
ありがとうございます。
結果を変数に代入出来なくなりましたが、構文を参考に>>517を直したら同様の出力結果で動きました。
#!/bin/sh
du -h /home/user/file.tmp | cat -T | cut -d ^ -f 1 > ~/filesize.txt
>>516
>>518さんを参考に手を入れたらキロバイト表示もできました。
ありがとうございます。
ただ、数字の後ろに「k」を入れる方法が判りませんでしたが。
#!/bin/sh
stat -c %s /home/user/file.tmp | awk '{printf "%s" ,$1/1024}' > ~/filesize.txt
0520login:Penguin
2008/01/26(土) 16:43:00ID:/buRKO/4stat -c %s /home/user/file.tmp | awk '{printf "%sk" ,$1}' > ~/filesize.txt
0521login:Penguin
2008/01/26(土) 23:58:52ID:NixStw3D応用ありがとうございます!
感謝。
0522login:Penguin
2008/01/29(火) 13:18:07ID:8n8HPqGB何か良い方法はあるでしょうか?
0523login:Penguin
2008/01/29(火) 15:57:53ID:8n8HPqGBHP環境なので、Linuxのstatコマンドがなくて途方にくれています。
0524login:Penguin
2008/01/29(火) 16:05:29ID:qGMFgswuLinux の話じゃないなら板違い。
0525login:Penguin
2008/01/29(火) 16:33:43ID:yAbAmnAssed -e 2d file >tempfile
mv tempfile file
のようにすればできるんですが,テンポラリファイルを使わない方法はありますか?
0526login:Penguin
2008/01/29(火) 16:37:12ID:qGMFgswuGNU sed なら -i で。
0527login:Penguin
2008/01/29(火) 21:52:45ID:6iHka9Siあったはずなんだがどうやってぐぐればいいかわからん。
0528login:Penguin
2008/01/29(火) 23:11:45ID:k/ZizWnP0529login:Penguin
2008/01/30(水) 00:25:54ID:/azTEfDv$ echo hoge > hoge
$ (rm hoge; (echo fuga; cat) > hoge) < hoge
要はサブシェルに開かせておけば中で上書きしても内容は
デスクリプタから参照できるからそれでin-place処理できるって奴だな。
上は手抜きだけど、どっかのFAQにデスクリプタ付け替えまくりの例題が
載ってたのだけ覚えてる。csh-whynot文書あたりかも?
0530login:Penguin
2008/01/30(水) 00:35:03ID:KwdpVGiV0531login:Penguin
2008/01/30(水) 20:21:01ID:6DxEwSigちょっと今シェルの作り方で困っているのですが
やりたいことは
一つのフォルダに入っているファイルを、ファイル名によって3つのフォルダに振り分けたいのです。
その際に、どのファイルをどのフォルダに移動するのかはシェルの中に記述するのではなく、
ファイル名の一覧が書いてあるtxtファイルを一行ずつ読んで振り分けたいのです。
ですが、作り方が今いちわかりません。
例えばA,B,Cと分かれていたら
1、Aのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
2、同じファイル名がヒットしたらAに送る
3、次にBのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
4、同じファイル名がヒットしたらBに送る
ファイル名が書かれたtxtファイルはA用B用C用の3種類用意します。
どうやって作ればいいのでしょうか?
0532login:Penguin
2008/01/30(水) 20:36:32ID:CiuX3/ZK0533login:Penguin
2008/01/30(水) 20:38:30ID:0RlCwXSW0534login:Penguin
2008/01/30(水) 21:41:32ID:wmsZ0JX8testコマンドでググレカス
ファイルの読み込み方すらわかんねーなら本一冊買って出直して来い
0535login:Penguin
2008/01/30(水) 21:48:11ID:6DxEwSig冷たい
しかも叩く時だけは一気にレスがつくんだね
>>532
>>533
わからないなら無理にレスしなくていいです
0536login:Penguin
2008/01/30(水) 22:48:33ID:5hT959VT>>わからないなら無理にレスしなくていいです
に類する文言が書き込まれる率が高いな、て思えるんだが、これは
1. この手のバカは結局バカだから、おなじようにしか考えられない
2. 実は同じヤツが何度も釣りに励んでいる
のどちらか、ということだろうか?
0537login:Penguin
2008/01/30(水) 22:54:16ID:KwdpVGiV0538login:Penguin
2008/01/30(水) 22:59:49ID:v0ETiHGx真・教えて君養成マニュアルとかがどっかにあるんじゃないか?w
0539login:Penguin
2008/01/30(水) 23:01:22ID:sxNLHjSvところで,シェルスクリプトをシェルと略す感覚が信じられない.せめてスクリプトのほうを残すべきじゃないのか,意味的に…
0540login:Penguin
2008/01/30(水) 23:05:38ID:j0KqLeiLhttp://www.redout.net/data/osietekun.html
0541login:Penguin
2008/01/30(水) 23:39:48ID:KwdpVGiVGUIのシェルってのはそう最近でもないと思う。
DOSSHELLとか、X68kのVS.Xとかあったじゃないか。
0542login:Penguin
2008/01/31(木) 00:54:52ID:5zXcU2rlうわーきもい。シェルを作るという表現はおかしい
シェルの作り方って、VBの作り方、Javaの作り方
聞いているのと同じ。それをKY言うのは異常。
for文とifを組み合わせれてループさせれば。
0543login:Penguin
2008/01/31(木) 05:38:28ID:sRx07lee>わからないなら無理にレスしなくていいです。
たぶんここの人は9割以上わかっていると思う。
0544login:Penguin
2008/01/31(木) 05:47:16ID:sRx07lee態度の豹変に腹が立つ。
mv -i `neko a.list` a
mv -i `neko b.list` b
mv -i `neko c.list` c
0545login:Penguin
2008/01/31(木) 13:37:31ID:zeMbksrC単純にnukoするよりもls -1 | grep -f a.list
とかしてより分けた方が良くないか?
0546login:Penguin
2008/01/31(木) 19:50:10ID:/M27f8tado
echo $変数名
done
この構文の変数名ってなんでもいいんですか?
あとこれを実行すると
10
20
30
になりますよね?
0547login:Penguin
2008/01/31(木) 20:53:32ID:p8W84r95変数名に使える文字は英字と数字、アンダースコアのみな。
0548login:Penguin
2008/01/31(木) 21:07:34ID:Ih8EaxE5$ for 9_var in 10 20 30; do echo $9_var; done
bash: `9_var': not a valid identifier
0549login:Penguin
2008/01/31(木) 21:49:51ID:g7asi3X7こんなところで釣りなんかすんなよ...
もし釣りじゃなくってバカなんだったら、せめてmanするとかググるセンセに聞くとか、な?
0551login:Penguin
2008/01/31(木) 23:25:56ID:g7asi3X7う゛、勘違いとかtypoとか。いかんな、落ち着かんと。
でもってマヂレスしとくと、変数の1文字目は数字じゃダメな。
0552login:Penguin
2008/02/01(金) 20:50:34ID:aG/PrNJ9STRING1 を含んでいて、かつ STRING2も含んでいる行だけを
印字しようとおもうのですが、
grep STRING1 kakikomi.txt| grep STRING2
くらいしか思いつきません。二度手間な気がします。
もう少しいい方法ありませんか?
0553login:Penguin
2008/02/01(金) 20:57:02ID:IKSH1LNN0554login:Penguin
2008/02/01(金) 21:42:25ID:KLEwAeBFそれ前スレ(UNIX板のほうだったかも試練)で話題になったな
「STRING1とSTRING2を『順不同で』含む行をイッパツで引っ掛けようとしたら
egrep '(STRING1.+STRING2)|(STRING2.+STRING1)'
となってしまう。2個ならまだいいが、3個、4個...と増えていくと正規表現がキモいことになってしまう。
順不同という条件なら、>>552のやり方が一番シンプル
0555login:Penguin
2008/02/01(金) 22:20:29ID:9CGaNXUyとか。
0556login:Penguin
2008/02/01(金) 23:10:27ID:aG/PrNJ9ありがとうございました。
最近暇なので本でいろいろ勉強してみます。
0557login:Penguin
2008/02/02(土) 02:58:37ID:jQtmOvcuhttp://www.sexydesktop.co.uk/youko.htm
ここには全部で4ページ分48種類の松金洋子の画像がある。
## このサイトの画像はすべてデスクトップ用の壁紙を目的としているので、
## 一つの画像に関して数種類の解像度・縦横比の画像が用意されており、
## アクセスしてきた人の使っているディスプレイ解像度を検出しては、
## 最適な解像度のものを優先的にプッシュするようになっている。
## また、画像ファイルの命名ルールは非常に単純かつ形式的で、
## たとえば例に挙げた松金洋子の画像の場合、
## まず画像の名前を表す youko1 から youko48 までの48種類の画像が用意されている。
## さらにそれぞれの解像度を表す 1280x800 や 800x600 の文字列が続き、
## 最後に拡張子 .jpg が付けられている。
## 注意する点があるとすると、例えば youko48 に対して youko01 だとか、
## 1280x1024 に対して 0800x0600 といった「桁数合わせ」が一切行われていないということ。
0558557
2008/02/02(土) 02:59:35ID:jQtmOvcu1). サイトがプッシュしてくるこちらのディスプレイ解像度に関係なく、
すべての画像について、解像度のより大きいバージョンを、
番号の一番若いものから古いものまで全種類取って来たい。
2). その際、取って来た画像のファイル名を修正して、
youko48 に対しては youko01 、1280x1024 に対して 0800x0600 などの「桁数合わせ」をしたい。
3). さらに、ファイル名の中の画像名を表す文字列と、解像度を表す文字列とを _ で結ぶようにしたい。
具体的には、youko11600x1200.jpg と名付けられた youko1 という画像の 1600x1200 版のファイル名を、youko01_1600x1200.jpg としたい。同様に、youko481280x1024.jpg と名付けられた youko48 という画像の
1280x1024 版のファイル名を youko48_1280x1024.jpg としたい。
以上をまとめると、参考例の松金洋子の画像で言えば、
youko11600x1200.jpg から youko481280x1024.jpg までの画像を、
youko01_1600x1200.jpg から youko48_1280x1024.jpg として保存したい。
これを実現するスクリプトをどう書けばいいでしょうか?
なお、好みのタレントの画像が何種類用意されているか(松金洋子の場合は48種類)については、
ダウンロードを開始する前に手作業で調べることとします。
■ このスレッドは過去ログ倉庫に格納されています