[表示 : 全て 最新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あたりに色々と。


481 名前:login:Penguin mailto:sage [2008/01/19(土) 19:43:02 ID:rxOILVvf]
vi start.txt
q94J↓q10000@9
:%s/ /,/g
:w end.txt


482 名前:login:Penguin mailto:sage [2008/01/19(土) 19:59:13 ID:58USgOmq]
>>473-474
Debianではゲームの実行バイナリは/usr/gamesに置かれるぜ。
最近はポリシーチェッカも警告を出すようになったから、lennyまでには移動完了するんじゃね。
lintian.debian.org/reports/Tpackage-section-games-but-contains-no-game.html
lintian.debian.org/reports/Tpackage-section-games-but-has-usr-bin.html

483 名前:login:Penguin mailto:sage [2008/01/19(土) 21:00:37 ID:ZLNpfSkQ]
>>482
なんでだろうね?
FHS誤解してたかと読み直したらそんなことないし。理由がわからん。

484 名前:login:Penguin mailto:sage [2008/01/19(土) 21:04:24 ID:ZLNpfSkQ]
ごめん上は嘘。Debian Policy には

 As 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作っていいと
書いてあった。

485 名前:login:Penguin mailto:sage [2008/01/19(土) 21:14:55 ID:Xt/fDApd]
FHSとかグローバリゼーションとか国際化とか
そういうのが全て悪の元凶。

486 名前:login:Penguin mailto:sage [2008/01/19(土) 22:06:40 ID:ZLNpfSkQ]
FHSは/usr/localと/etcを綺麗にしてくれる。
それだけでも推進されてしかるべき。

487 名前:login:Penguin mailto:sage [2008/01/20(日) 02:02:52 ID:dexE1e0m]
/usr/gamesはオプションなのに、/usr/local/gamesは必須扱いなところを見れば分かるとおり
ディトリビュータはゲームなんか提供すんな、ということなのだよ。

つまりゲームを提供しているDebianは人々を堕落させる悪のディストリビュータなのだ!

488 名前:login:Penguin mailto:sage [2008/01/20(日) 02:23:04 ID:kH+ebKTA]
>>487
なにその陰謀史観(w

単に /usr/ 直下はディストリの管轄だし自分で決めろ、
一方で /usr/local/* は空フォルダ切っておく以上は認められないから
代わりとして、せめて誘導できるように切っておけ、ということかと。

FHSで自分的に従来慣習と比較して見慣れないのは/srvだな。
どこのUNIXでの慣習だったんだろう?


489 名前:login:Penguin mailto:sage [2008/01/20(日) 02:55:38 ID:M1QHfiRt]
つっこみどころは
/usr/games/bin/fortune じゃなくて
/usr/games/fortune ってとこじゃなかったのかー



490 名前:login:Penguin mailto:sage [2008/01/20(日) 04:01:16 ID:FZKKsnAp]
>>476
sed ':b;1~4,+2{N;s/\n/,/;bb}'

sedも心の片隅にでも置いておいてやってくだされ。


491 名前:login:Penguin mailto:sage [2008/01/20(日) 04:20:45 ID:IwRos1VB]
>>489
管理者のPATHからゲーム関係を除外するのが目的だろうから
/usr/games/binとサブディレクトリを掘る必要はないんじゃね。

492 名前:login:Penguin mailto:sage [2008/01/21(月) 02:31:10 ID:HJiECvMS]
>>490
そんな記法初めて見た…
どうなってんの???

493 名前:login:Penguin mailto:sage [2008/01/21(月) 02:55:10 ID:QTxOOwHl]
アドレス指定がGNU拡張?

494 名前:login:Penguin mailto:sage [2008/01/21(月) 11:41:48 ID:JvqHER/W]
>>476
paste -d, - - - -

paste も心の片(ry


495 名前:login:Penguin mailto:sage [2008/01/21(月) 14:42:32 ID: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
としましたが、空白が表示されるだけでした。

496 名前:login:Penguin mailto:sage [2008/01/21(月) 14:51:31 ID:N+zVQlnl]
>>495
paste

497 名前:login:Penguin mailto:sage [2008/01/21(月) 14:53:35 ID:svPtjQeo]
>>496
ありがとうございました。
ぐぐるまでもヘルプ読むまでもなく、
適当にいじっただけでそうなりました。

498 名前:login:Penguin mailto:sage [2008/01/22(火) 11:11:17 ID:DOTIpHDE]
gawk '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
gawk '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

ファイル数に制限はない。あと出力される行数は、最後のファイルの行数によって決まってしまうがな。

499 名前:login:Penguin mailto:sage [2008/01/25(金) 13:18:49 ID: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



500 名前:login:Penguin mailto:sage [2008/01/25(金) 15:41:59 ID:5ugSsaO2]
>>499
そのままだと画像ファイル名やパスに空白があると動かないけど、いいのか?

501 名前:login:Penguin mailto:sage [2008/01/25(金) 17:04:10 ID:HizVC3Pf]
#!/usr/bin/python
import 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))
# 高級言語って素晴らしいね

502 名前:login:Penguin mailto:sage [2008/01/25(金) 17:51:17 ID:u9KTnE0i]
>501 ちょwwスレタイwww
修正してみました

#!/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"


503 名前:login:Penguin mailto:sage [2008/01/25(金) 18:55:56 ID:u9KTnE0i]
>502 事故レス
expr はクオートしちゃまずかった

504 名前:login:Penguin mailto:sage [2008/01/26(土) 00:32:05 ID:0LMYrtfF]
個人的には NUM= 以降を配列でやらせることが多いので、わりと bash を使う。

#!/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[@]}`]}

とか。

505 名前:login:Penguin mailto:sage [2008/01/26(土) 00:54:55 ID:a+SvfS+1]
>>504
おまいさんの find には -iname は無いのか?
あと、bash なら自前で算術計算できるよ

bsetbg "${TARGET[RANDOM % ${#TARGET[@]}]}"

506 名前:login:Penguin mailto:sage [2008/01/26(土) 01:31:49 ID:Gp61cAWI]
>おまいさんの find には -iname は無いのか?
あ、これは知らんかった。有り難う。
>あと、bash なら自前で算術計算できるよ
こちらは知っていたけど、元ネタに合わせんと。

507 名前:login:Penguin mailto:sage [2008/01/26(土) 11:11:47 ID:NixStw3D]
#!/bin/sh
filesize=('du -h ~/file.tmp')
$loglen > ~/filesize.txt

という感じでfile.tmpのファイルサイズを出力したいのですが
出力結果に不要な部分があります。
欲しい部分だけ切り取るには、どうすればいいでしょうか?
よろしくお願いします。

100k /home/user/file.tmp
~~~~~  ~~~~~~~~~~~~~~~~~~~~
 ↑         ↑
欲しい     要らない部分

508 名前:login:Penguin mailto:sage [2008/01/26(土) 11:20:53 ID:NixStw3D]
#!/bin/sh
filesize=('du -h ~/file.tmp')
$filesize > ~/filesize.txt

間違えてしまいました。こんな感じです。

grepで抽出するオプションの書き方も思い付かず
スクリプトで処理するには・・・?と、行き詰まってます。

509 名前:login:Penguin mailto:sage [2008/01/26(土) 11:34:50 ID:opXPKDAo]
>>508
cut (coreutils)



510 名前:login:Penguin mailto:sage [2008/01/26(土) 11:48:51 ID:NixStw3D]
>>509
ヒントありがとうございます。
使い方を調べてみます。

511 名前:login:Penguin mailto:sage [2008/01/26(土) 12:47:23 ID:NixStw3D]
>>509
もう少しヒントをください。

cat と coreutils のどちらかを使うや
cat か coreutilsのどちらかを使うかや
レスの意図を示していただけるとありがたいです。

シェルスクリプト歴数時間で理解が及ばなく申し訳ないです。

512 名前:login:Penguin mailto:sage [2008/01/26(土) 12:52:39 ID:K0Rp0izE]
>511 ちょっとでもぐぐってみたのかと.
あと猫じゃなくて切るほうな.

513 名前:login:Penguin mailto:sage [2008/01/26(土) 13:12:20 ID:NixStw3D]
>>512
調べてみたのですが、広範囲になってきて混乱してきました。

今のところ
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' を実行して下さい.

514 名前:login:Penguin mailto:sage [2008/01/26(土) 13:15:18 ID:K0Rp0izE]
>513 catじゃなくてcut.たぶんこれ一発でやりたいことはできると思うから調べてみな.

515 名前:login:Penguin mailto:sage [2008/01/26(土) 13:22:31 ID:NixStw3D]
>>512,514
ありがとうございます。
素で間違えていました。

調べてみます。

516 名前:login:Penguin mailto:sage [2008/01/26(土) 13:24:02 ID:ShBosd97]
stat -c %s
ではだめなのか

517 名前:login:Penguin mailto:sage [2008/01/26(土) 13:43:18 ID: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
ヒントありがとうございます。
調べてみます。

518 名前:login:Penguin mailto:sage [2008/01/26(土) 14:22:43 ID:/buRKO/4]
>>517
これでいいだろ。
du -h /home/user/file.tmp | awk '{print $1}' > ~/filesize.txt

519 名前:login:Penguin mailto:sage [2008/01/26(土) 16:30:30 ID:NixStw3D]
>>518
調べたら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




520 名前:login:Penguin mailto:sage [2008/01/26(土) 16:43:00 ID:/buRKO/4]
>>519
stat -c %s /home/user/file.tmp | awk '{printf "%sk" ,$1}' > ~/filesize.txt


521 名前:login:Penguin mailto:sage [2008/01/26(土) 23:58:52 ID:NixStw3D]
>>520
応用ありがとうございます!
感謝。

522 名前:login:Penguin mailto:sage [2008/01/29(火) 13:18:07 ID:8n8HPqGB]
columnコマンドがない環境でインデント合わせをしたいのですが、
何か良い方法はあるでしょうか?

523 名前:login:Penguin mailto:sage [2008/01/29(火) 15:57:53 ID:8n8HPqGB]
lsコマンドで、ファイルのatimeやctimeを取得する方法はあるでしょうか。
HP環境なので、Linuxのstatコマンドがなくて途方にくれています。

524 名前:login:Penguin mailto:sage [2008/01/29(火) 16:05:29 ID:qGMFgswu]
>>523
Linux の話じゃないなら板違い。

525 名前:login:Penguin mailto:sage [2008/01/29(火) 16:33:43 ID:yAbAmnAs]
ファイルから目的の行を削除して上書きしたいとき,
sed -e 2d file >tempfile
mv tempfile file
のようにすればできるんですが,テンポラリファイルを使わない方法はありますか?

526 名前:login:Penguin mailto:sage [2008/01/29(火) 16:37:12 ID:qGMFgswu]
>>525
GNU sed なら -i で。

527 名前:login:Penguin mailto:sage [2008/01/29(火) 21:52:45 ID:6iHka9Si]
リダイレクトとサブシェルを駆使してうまいことinplace editをやる技が
あったはずなんだがどうやってぐぐればいいかわからん。


528 名前:login:Penguin mailto:sage [2008/01/29(火) 23:11:45 ID:k/ZizWnP]
つ named pipe

529 名前:login:Penguin mailto:sage [2008/01/30(水) 00:25:54 ID:/azTEfDv]
こんな感じのやつか?

 $ echo hoge > hoge
 $ (rm hoge; (echo fuga; cat) > hoge) < hoge

要はサブシェルに開かせておけば中で上書きしても内容は
デスクリプタから参照できるからそれでin-place処理できるって奴だな。

上は手抜きだけど、どっかのFAQにデスクリプタ付け替えまくりの例題が
載ってたのだけ覚えてる。csh-whynot文書あたりかも?




530 名前:login:Penguin mailto:sage [2008/01/30(水) 00:35:03 ID:KwdpVGiV]
おおう、そんなかんじだったかも。thx



531 名前:login:Penguin mailto:sage [2008/01/30(水) 20:21:01 ID:6DxEwSig]
すいません
ちょっと今シェルの作り方で困っているのですが

やりたいことは
一つのフォルダに入っているファイルを、ファイル名によって3つのフォルダに振り分けたいのです。
その際に、どのファイルをどのフォルダに移動するのかはシェルの中に記述するのではなく、
ファイル名の一覧が書いてあるtxtファイルを一行ずつ読んで振り分けたいのです。
ですが、作り方が今いちわかりません。

例えばA,B,Cと分かれていたら
1、Aのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
2、同じファイル名がヒットしたらAに送る
3、次にBのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
4、同じファイル名がヒットしたらBに送る

ファイル名が書かれたtxtファイルはA用B用C用の3種類用意します。

どうやって作ればいいのでしょうか?

532 名前:login:Penguin mailto:sage [2008/01/30(水) 20:36:32 ID:CiuX3/ZK]
シェルの作り方なんぞ知るかい。

533 名前:login:Penguin mailto:sage [2008/01/30(水) 20:38:30 ID:0RlCwXSW]
宿題は自分でやれ。

534 名前:login:Penguin mailto:sage [2008/01/30(水) 21:41:32 ID:wmsZ0JX8]
>531
testコマンドでググレカス
ファイルの読み込み方すらわかんねーなら本一冊買って出直して来い

535 名前:login:Penguin mailto:sage [2008/01/30(水) 21:48:11 ID:6DxEwSig]
うわー
冷たい
しかも叩く時だけは一気にレスがつくんだね

>>532
>>533
わからないなら無理にレスしなくていいです

536 名前:login:Penguin mailto:sage [2008/01/30(水) 22:48:33 ID:5hT959VT]
さいきんの、このバカの質問な感じのには

>>わからないなら無理にレスしなくていいです

に類する文言が書き込まれる率が高いな、て思えるんだが、これは

 1. この手のバカは結局バカだから、おなじようにしか考えられない
2. 実は同じヤツが何度も釣りに励んでいる

のどちらか、ということだろうか?

537 名前:login:Penguin mailto:sage [2008/01/30(水) 22:54:16 ID:KwdpVGiV]
シェルを作るのは結構高度な作業だからな。


538 名前:login:Penguin mailto:sage [2008/01/30(水) 22:59:49 ID:v0ETiHGx]
>>536
真・教えて君養成マニュアルとかがどっかにあるんじゃないか?w

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



540 名前:login:Penguin mailto:sage [2008/01/30(水) 23:05:38 ID:j0KqLeiL]
教えてクン養成マニュアル
www.redout.net/data/osietekun.html

541 名前:login:Penguin mailto:sage [2008/01/30(水) 23:39:48 ID:KwdpVGiV]
>>539
GUIのシェルってのはそう最近でもないと思う。
DOSSHELLとか、X68kのVS.Xとかあったじゃないか。


542 名前:login:Penguin mailto:sage [2008/01/31(木) 00:54:52 ID:5zXcU2rl]
>>531
うわーきもい。シェルを作るという表現はおかしい
シェルの作り方って、VBの作り方、Javaの作り方
聞いているのと同じ。それをKY言うのは異常。

for文とifを組み合わせれてループさせれば。

543 名前:login:Penguin mailto:sage [2008/01/31(木) 05:38:28 ID:sRx07lee]
>>535
>わからないなら無理にレスしなくていいです。

たぶんここの人は9割以上わかっていると思う。

544 名前:login:Penguin mailto:sage [2008/01/31(木) 05:47:16 ID:sRx07lee]
やる気がおきない。
態度の豹変に腹が立つ。
mv -i `neko a.list` a
mv -i `neko b.list` b
mv -i `neko c.list` c

545 名前:login:Penguin mailto:sage [2008/01/31(木) 13:37:31 ID:zeMbksrC]
>>544
単純にnukoするよりもls -1 | grep -f a.list
とかしてより分けた方が良くないか?

546 名前:login:Penguin [2008/01/31(木) 19:50:10 ID:/M27f8ta]
for 変数名 in 10 20 30
do
echo $変数名
done
この構文の変数名ってなんでもいいんですか?
あとこれを実行すると
10
20
30
になりますよね?

547 名前:login:Penguin mailto:sage [2008/01/31(木) 20:53:32 ID:p8W84r95]
>>546
変数名に使える文字は英字と数字、アンダースコアのみな。

548 名前:login:Penguin mailto:sage [2008/01/31(木) 21:07:34 ID:Ih8EaxE5]
すると、うちのbashはおかしい。。。

$ for 9_var in 10 20 30; do echo $9_var; done
bash: `9_var': not a valid identifier

549 名前:login:Penguin mailto:sage [2008/01/31(木) 21:49:51 ID:g7asi3X7]
もしかして>>351 == >>548なんか?
こんなところで釣りなんかすんなよ...

もし釣りじゃなくってバカなんだったら、せめてmanするとかググるセンセに聞くとか、な?



550 名前:548 mailto:sage [2008/01/31(木) 22:00:40 ID:m8vTasa1]
その話題では>>354だが、なぜ351と?

551 名前:login:Penguin mailto:sage [2008/01/31(木) 23:25:56 ID:g7asi3X7]
>>550
う゛、勘違いとかtypoとか。いかんな、落ち着かんと。

でもってマヂレスしとくと、変数の1文字目は数字じゃダメな。

552 名前:login:Penguin mailto:sage [2008/02/01(金) 20:50:34 ID:aG/PrNJ9]
kakikomi.txtというテキストファイルがあったとします。
STRING1 を含んでいて、かつ STRING2も含んでいる行だけを
印字しようとおもうのですが、
grep STRING1 kakikomi.txt| grep STRING2
くらいしか思いつきません。二度手間な気がします。
もう少しいい方法ありませんか?

553 名前:login:Penguin mailto:sage [2008/02/01(金) 20:57:02 ID:IKSH1LNN]
>552 -e

554 名前:login:Penguin mailto:sage [2008/02/01(金) 21:42:25 ID:KLEwAeBF]
>>552
それ前スレ(UNIX板のほうだったかも試練)で話題になったな

「STRING1とSTRING2を『順不同で』含む行をイッパツで引っ掛けようとしたら

egrep '(STRING1.+STRING2)|(STRING2.+STRING1)'

となってしまう。2個ならまだいいが、3個、4個...と増えていくと正規表現がキモいことになってしまう。
順不同という条件なら、>>552のやり方が一番シンプル

555 名前:login:Penguin mailto:sage [2008/02/01(金) 22:20:29 ID:9CGaNXUy]
awk '/STRING1/&&/STRING2/' kakikomi.txt
とか。

556 名前:login:Penguin mailto:sage [2008/02/01(金) 23:10:27 ID:aG/PrNJ9]
>>554,555
ありがとうございました。
最近暇なので本でいろいろ勉強してみます。

557 名前:login:Penguin [2008/02/02(土) 02:58:37 ID:jQtmOvcu]
例えばここに置いてある松金洋子のデスクトップ用壁紙画像をターゲットとする。
www.sexydesktop.co.uk/youko.htm
ここには全部で4ページ分48種類の松金洋子の画像がある。

## このサイトの画像はすべてデスクトップ用の壁紙を目的としているので、
## 一つの画像に関して数種類の解像度・縦横比の画像が用意されており、
## アクセスしてきた人の使っているディスプレイ解像度を検出しては、
## 最適な解像度のものを優先的にプッシュするようになっている。

## また、画像ファイルの命名ルールは非常に単純かつ形式的で、
## たとえば例に挙げた松金洋子の画像の場合、
## まず画像の名前を表す youko1 から youko48 までの48種類の画像が用意されている。
## さらにそれぞれの解像度を表す 1280x800 や 800x600 の文字列が続き、
## 最後に拡張子 .jpg が付けられている。
## 注意する点があるとすると、例えば youko48 に対して youko01 だとか、
## 1280x1024 に対して 0800x0600 といった「桁数合わせ」が一切行われていないということ。

558 名前:557 [2008/02/02(土) 02:59:35 ID:jQtmOvcu]
ここから先が質問。やりたいことは、

1). サイトがプッシュしてくるこちらのディスプレイ解像度に関係なく、
すべての画像について、解像度のより大きいバージョンを、
番号の一番若いものから古いものまで全種類取って来たい。

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種類)については、
ダウンロードを開始する前に手作業で調べることとします。

559 名前:login:Penguin mailto:sage [2008/02/02(土) 03:11:26 ID:BYWZpRq/]
>>557-558
まずお前が考えて出来たスクリプトをうpしろ
話はそれからだ



560 名前:557-558 [2008/02/02(土) 03:17:30 ID:jQtmOvcu]
んー、俺はスクリプトに無知だから、一から十まで全部取って来て、
後で手作業で仕分けする、みたいな超バカなことしかできんのです。
だからエロい人に教えてほしいんです。。
ダメならヒントだけでもいいので下さい。

561 名前:login:Penguin mailto:sage [2008/02/02(土) 03:19:54 ID:BYWZpRq/]
>>557-558
ほらよ
っ google.co.jp

562 名前:login:Penguin mailto:sage [2008/02/02(土) 07:40:21 ID:QLk1rUEb]
地道にループ回すしかないのでは
たぶんリネーム関連はperlか何か使ったほうがラクじゃね?

563 名前:login:Penguin mailto:sage [2008/02/02(土) 08:38:47 ID:VQl51rL6]
2).3). youko0123456789x0123456789.jpg というファイル名はどのように整形すれば?

564 名前:login:Penguin [2008/02/02(土) 10:16:29 ID:2Gx0/Giv]
$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbb
cccccccccccccccccccccccc
+ddddddddddddddd

長い行は先頭に+をつけて折り返しているという内容のファイルを

$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb
cccccccccccccccccccccccc ddddddddddddddd

というように+の折り返しを前の行の後ろに空白付で結合させるにはどうすればいいでしょう?


565 名前:login:Penguin mailto:sage [2008/02/02(土) 10:19:50 ID:QLk1rUEb]
cat test.txt | tr '\n+' ' 'とかどう?

566 名前:login:Penguin mailto:sage [2008/02/02(土) 10:34:51 ID:2Gx0/Giv]
>>565
実行したら
$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd
みたいになりましたが

$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb
cccccccccccccccccccccccc ddddddddddddddd
これが出力としてほしいです。
\nと+が別で判断されているのでしょうか・・・

567 名前:login:Penguin mailto:sage [2008/02/02(土) 10:37:11 ID:QLk1rUEb]
間違った.cat test.txt | tr '\n\+' ' 'で.

568 名前:login:Penguin mailto:sage [2008/02/02(土) 10:39:50 ID:QLk1rUEb]
ごめん,俺嘘ばっかり言ってるから気にしないでorz

569 名前:login:Penguin mailto:sage [2008/02/02(土) 10:41:24 ID:2Gx0/Giv]
>.567
同じ結果でしたw
レスありがとう!



570 名前:557-558 [2008/02/02(土) 10:50:34 ID:jQtmOvcu]
>>563
どうもです。
えー、そういう名前のファイルは存在しないので考えてもみませんでした。

>>562
もし $name$no1024x768$suffix がある時 $name$no1024x0768$suffix にせよ、
みたいなことを延々とやる、ということなんでしょうか?(←無知)
うーん。。。

571 名前:login:Penguin mailto:sage [2008/02/02(土) 11:02:51 ID:jHuzpaac]
>>564

if 先頭が+じゃない then
 echo ""
else
 echo -n " "
fi

echo -n 行



572 名前:login:Penguin mailto:sage [2008/02/02(土) 12:30:06 ID:A3vIBKBi]
>>564
sed 'N;s/\n+/ /;t;P;D'


573 名前:login:Penguin mailto:sage [2008/02/02(土) 14:09:27 ID:2Gx0/Giv]
>>572
ありがとうございます!!

574 名前:login:Penguin mailto:sage [2008/02/05(火) 19:10:25 ID:E60rvXpx]
/tmpにあるディレクトリをリストし
そこからディレクトリ名だけを切り取りたいと考えています。

/tmpには a b c というディレクトリがあるとして
$ find /tmp -type d -maxdepth 1 -mindepth 1 | xargs awk -F/ '{print $NF}'
を実行すると a だけが出力されてしまいます。
望んでいる出力は a b c なのでうまく出力されるようにしたいです。

findのみを実行すると
/tmp/a
/tmp/b
/tmp/c
と出力されることは確認しました。

申し訳ないのですが良い方法をご教授ください。

575 名前:login:Penguin mailto:sage [2008/02/05(火) 19:18:42 ID:DHgW4Gk4]
find /tmp -maxdepth 1 -mindepth 1 -type d | awk -F/ '{print $NF}'
find /tmp -maxdepth 1 -mindepth 1 -type d | sed -e 's/.*\///'
find /tmp -maxdepth 1 -mindepth 1 -type d -exec basename {} \;

576 名前:574 mailto:sage [2008/02/05(火) 19:21:21 ID:E60rvXpx]
>>574で実行したコマンドは
$ find /tmp -type d -maxdepth 1 -mindepth 1 | xargs echo | awk -F/ '{print $NF}'
の間違いでした。

よろしくおねがいします。

577 名前:574 mailto:sage [2008/02/05(火) 19:22:58 ID:E60rvXpx]
>>575
望みどおりの出力を得ることができました!
早い回答感謝します。
ありがとうございます。

578 名前:login:Penguin mailto:sage [2008/02/06(水) 21:11:41 ID:Qs2nEtFk]
すみません、次の表現ってどういう意味なんでしょうか
($Fはlsの結果が入る)
 if expr "$F" : '[[:alunum:]_-]\+$' > /dev/null 2>&1; then ...
 特に : '[[:alunum]_-]\+$'の箇所が分かりません

自分で調べて分かったのは
 [:alunum:]が数値を表すPOSIX準拠の文字クラスであること
 :はヌルコマンド
[]が正規表現とすると[[:alnum:]_-]\+$は以下のいずれかという意味でしょうか
 数値+$
 _+$
 -+$
だとしても前半の:とのつながりもよく分からないです..

579 名前:login:Penguin mailto:sage [2008/02/06(水) 21:39:32 ID:2Q3KS/FB]
そのコロンはexpr の引数であって、パターンマッチを行わせるもの。
ヌルコマンドではない。

[[:alnum]]_-]¥+$ は、
「英数もしくは _ もしくは -」([[:alnum]]_-])の繰り返し(¥+)で末尾になる($)パターン。

つまり$Fが↑のパターンにマッチするかで判断するif文だな。
出力を/dev/nullに捨てている理由は、exprの動作を調べればわかる。







580 名前:login:Penguin mailto:sage [2008/02/06(水) 22:12:35 ID:Qs2nEtFk]
>>579 ありがとうございます。やっと理解できました!
exprについては、nullまたは0を返した際に0を返すという仕様のため
/dev/nullに出力していることはすぐ分かったんですが
「:」もexprの構文だったんですね
ずっとシェルのパターンマッチの構文として「:」を調べていたため
ハマってました,thx!


581 名前:login:Penguin mailto:sage [2008/02/07(木) 17:29:04 ID:SojUAx7O]
リダイレクトで先頭5行目から行末から5行目前までを出力したいのですが、
??? | head -n xx | tail -n xx 以外に良い方法はあるでしょうか






[ 続きを読む ] / [ 携帯版 ]

前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