|
sedを使用して大文字から小文字に変換したいのですが、 なかなか上手くいきません。 例えば、「YAMADA」を「Yamada」と先頭の1文字目は大文字で、 2文字目以降を小文字に変換したいのですが、以下の様にsed を使ってやったのですが上手く行きません。 sedでは、無理なのでしょうか。 環境は、Solaris8、Bシェルです。 ---------------------- NM=Ya1AMADA echo $NM | sed 's/[A-Z].*/[a-z]/g' NM=YAMADA echo $NM | sed 's/\(.\)[A-Z]*/\1/g' |
|
>>4346 hagu 多分、sedだけでは無理だと思います。 sedを使わなくても、awkだけでも可能です。 echo $NM | nawk '{for(j=i=1;i<=length($0); i++) if(i==1) {NM[i]=substr($0,i,1)} else {NM[i]=tolower(substr($0,i,1))}} END{for(count in NM) printf("%c",NM[count]); printf("\n")}' |
|
>>4347 お 試してみましたが、出方が変です。 amadaY となります。 |
|
始めまして、ネットワークプログラミング周辺読ませて頂きました。 簡潔なソースで読みやすかったです。 お礼に掲示板カキコ、それにしてもみなさん勉強熱心ですね(笑 ---------------------------------------- echo $NM | \ sed -e h -e 's/^\(.\)\(.*\)/\1/g' \ -e 'y/[abcdefghijklmnopqrstuvwxyz]/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/' \ -e x \ -e 's/^.\(.\)/\1/g' \ -e 'y/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/[abcdefghijklmnopqrstuvwxyz]/' \ -e H \ -e g \ -e 's/\n//' ---------------------------------------- なんとなしsedの勉強してしまった、本買う気にはならないけどね。 http://web.archive.org/web/19961202111128/http://yase.yajima.kuis.kyoto-u.ac.jp/staffs/sengoku/sedlec/ |
|
>>4346 hagu もしperlならこんな感じなんでしょうか? echo $NM | perl -ple 'y/A-Z/a-z/;substr($_,0,1)=~y/a-z/A-Z/;' |
|
>>4347 お >>4348 hagu 連想配列の場合、表示の順序は、ハッシュ法に従うのでランダムとなります。 すみません。 echo $NM | nawk '{for(i=1;i<=length($0); i++) if(i==1) {NM[i]=substr($0,i,1)} else {NM[i]=tolower(substr($0,i,1))}} END{for(j=1; j<i; j++) printf("%c",NM[j]); printf("\n")}' |
|
>>4349 マーブル 凄い。 sedだけでですね。 でも、凄く、複雑すぎます。 >>4351 お 今度は、期待したいた結果が得られました。 awkを使っているのも複雑ですね。 |
|
>>4352 hagu これじゃだめ? $ echo $NM | nawk '{ a=toupper(substr($0,1,1)); b=tolower(substr($0,2)); printf "%s%s\n",a,b; }' |
|
>>4353 zsh そうですよね。 substr()で2文字目以降すべてを変換してしまえばいんですよね。 何、ループで1文字ずつ変換し、表示しているんだろう。 |
|
あまり知られていないscanfの用法。 既出でしたか残念。>>4041>>4042 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html 以下同意 ------------------------------------- sscanf(host_path,"%[^/]%s",host,path); ------------------------------------- p = strchr(host_path, '/'); if ( p != NULL ){ strcpy(path, p); *p = '\0'; strcpy(host, host_path); } else { strcpy(host, host_path); } ------------------------------------- |
|
fdopen()で作成されたストリームが閉じられたときにファイル記述子も 閉じられる。 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fdopen.3.html よって以下のページのL:125は不要です。 http://x68000.q-e-d.net/~68user/net/c-http-2.html |
|
>>4356 マーブル ありがとうございます。とりあえず POSIX を確認させてください (明日以降)。 http://www.opengroup.org/onlinepubs/009695399/functions/fdopen.html |
|
>>4357 68user 明日以降と言いつつ今確認してみましたが、POSIX にはそういう記述は ないように見えます。また、Solaris9 のマニュアルにも書いてないように 見えます。 http://www.freebsd.org/cgi/man.cgi?query=fdopen&sektion=3C&manpath=SunOS+5.9 しかし BSD ならば、4.4BSD-Lite2 にはそのような記述があります。 http://www.freebsd.org/cgi/man.cgi?query=fdopen&manpath=4.4BSD+Lite2&format=html Solaris や HP-UX が手元にある方にお願いなのですが、fdclose して fclose した ときにソケットディスクリプタがクローズされるかどうか truss コマンドなどで 確認していただけないでしょうか (わたしのまわりは FreeBSD と Linux しかないので)。 いずれにせよ何かしらの補足は追記したいと考えています。 |
|
>>4358 68user > fdclose して fclose したときに 「fdopen して fclose したときに」の誤りでした。 ちなみに「UNIX ネットワークプログラミング第2版」からは、この件についての 記述を読み取ることはできませんでした。 |
|
>>4359 68user 機種依存等深く考えずに書き込んでしまって申し訳ございません。 また知合いに話せる人がいない為に決めつけたような書き込みになってしまったこともお詫びします。 基本的にFILE構造体にfileディスクリプタが含まれているものと理解していたもので、 fclose時に連動してcloseされるかな?と単純に考えてしまいました。 trussで確認した結果が以下でcloseされているようでした(これおもしろいですね) SunOS eibw23 5.9 Generic_112233-03 sun4u sparc SUNW(Solaris8か9) ----------------------------------------------------------- read(0, 0xFF3414EC, 1024) (sleeping...) read(0, "\n", 1024) = 1 llseek(3, 0, SEEK_CUR) = 0 close(3) = 0 read(0, 0xFF3414EC, 1024) (sleeping...) read(0, "\n", 1024) = 1 _exit(0) |
|
>>4360 マーブル うゎ、アドレス込みで貼っちまった、ハズカシィ |
|
>>4360 マーブル opensolarisがsolarisとどれだけ違うかわかりませんが、 http://cvs.opensolaris.org/source/xref/on/usr/src/lib/libc/port/stdio/fdopen.c#64 fdの値は単純に渡されているように見えます。 (↑のサイト使い安くて良く使ってます、BSDでこのような感じのページご存知ですか?) |
|
>>4360 マーブル 昨日は変なことを書いてしまいました。fclose したんだから close するのは 当然ですよね。まぁ fdopen したものはフラッシュだけ行って close しない 実装があっても不思議ではないですが、素直に考えれば close するはず。 よって、125行目の close は削除します。 >>4362 マーブル > (↑のサイト使い安くて良く使ってます、BSDでこのような感じのページご存知ですか?) 普通の cvsweb でよければ、以下のものが cvsgraph が組み込まれているのでよく使います。 http://cvsweb.allbsd.org/cvsweb.cgi/src/lib/libc/stdio/fdopen.c ソース閲覧なら GLOBAL を使ったFreeBSD Source Code Tour が便利ですが、ファイル名が ころころ変わるので URL を保存しておいても役に立たないのがが困りものです。 http://snapshots.jp.freebsd.org/tour/ http://snapshots.jp.freebsd.org/tour/current/userland/cgi-bin/global.cgi?pattern=fdopen&id=&type=definition http://snapshots.jp.freebsd.org/tour/current/userland/S/9687.html#53 OpenSolaris のソースを見られるところは知りませんでした。今後活用させて いただきます。 |
|
初めましてWindowsユーザですが、仕事上 LinuxやCVSを使うことがあります。 コマンドをなかなか覚えられなくて、いつも参考にさせて頂いています。 |
|
>>4353 zsh 凄いです。 変換されました。 |
|
よくパーミッションでrは読む権利を、wは書く権利を、 xは実行する権利を与えるといいますが、それぞれの権利が 与えられている時、いない時は具体的にどのようなコマンド が有効であるのか、いまいちはっきり理解できません。 どなたか詳しくをしえてください。 |
|
>>4366 anonymous > それぞれの権利が与えられている時、いない時は具体的にどのようなコマンドが > 有効であるのか 何か哲学的なニオイがするので(?)、そもそも私が答えられる内容でも無い気は しますがそれでもよければ教えてください。 ええと、ちょっと見た限りでは書き込み中の「有効」の意味がよくわかりません。 もしかしたら具体的に何か目的があるんでしょうか。 あと、パーミッションが与えられているのはプログラム?読み書きするファイル? |
|
>>4364 がちゃぴ ありがとうございます。ご意見・ご指摘がありましたら遠慮なくどうぞ。 なお、世の中いろんな人がいますので、文章の一部を削除させていただきました。 削除した部分に関する話題はご遠慮いただきたく思います。ご理解ください。 >>4366 anonymous 紛らわしいのでハンドルを「68user」から「anonymous」と変更しました。 今後は適切なハンドルを使用してください。 |
|
>>4363 68user 御回答ありがとうございました。 また情報交換ができてうれしく思います、重ねてお礼申し上げます。 >>4367 has 話に割り込んでしまってごめんなさい。 >>4366 anonymous コマンドが読み書きするファイルのアクセス権限を考慮して判断するのが良いと思います。 例えばmountコマンドでは一般userにデバイスへのアクセス権限がないので(当方FreeBSD)、 コマンドは実行できてもmountはできません。 また許可を与えたい場合、デバイスファイルのパーミッションを変更すれば使用できますが、 いろいろ問題がありそうなので、 http://x68000.q-e-d.net/~68user/unix/pickup?sudo の方法を取ったりするそうです。 ついでにちょっと変な話。 実行権限がないディレクトリに対して移動(cd)もディレクトリの内容の確認も(ls)もできません。 が、opendir(c言語)を用いいると実行権限がなくても内容の確認ができてしまいます。 なんだか不思議な感じがしませんか? |
|
>>4369 マーブル > 実行権限がないディレクトリに対して移動(cd)もディレクトリの内容の確認も(ls)もできません。 > が、opendir(c言語)を用いいると実行権限がなくても内容の確認ができてしまいます。 少々誤解があるようですが、実行権限がないディレクトリに対しては、移動 (cd) は できませんが、ディレクトリの内容の確認 (ls) はできます (読み込み権限があれば)。 しかし ls -l はこけます。 引数なしの ls が行っていることは opendir(2) なわけですが、opendir(2) は ディレクトリの下にアクセスしません。ディレクトリエントリを読むだけなので % cat ディレクトリ名 相当の処理しかしていません。よって、ディレクトリに対する読み込み権限があれば ファイル一覧を取得できます (ディレクトリも広義のファイル)。 一方 ls -l は opendir(2) して、取得したファイル名それぞれについて stat(2) する わけですが、stat(2) するには それぞれのファイルの i-node を知る必要があります。 しかし i-node を知るには、そのファイルが属する上位ディレクトリの実行権限が必要です。 結局のところ、ディレクトリに対する実行権限とは 「ファイル名から i-node への変換を許可するかどうか」 であり、言い換えると 「namei(9) を許可するかどうか」 だとわたしは思っていますが、違っていたら誰か教えてください。 |
|
>>4370 68user すいません-Fのエイリアス掛かってました。 \lsで動作します、掲示板汚してごめんなさい。 truss ls -F testdirの結果の一部 fchdir(0x5) ERR#13 'Permission denied' よりディレクトリ内に移動できないということらしいです(FreeBSD) (Linuxで試したらfstatでのエラーだったのでものによりけりな予感 |
|
~はunixではどのような存在なのですか? |
|
>>4368 68user >>4366 anonymous は解決したのですか? |
|
はじめまして。 学校の課題で、C言語でnslookupみたいな動作をするプログラムを作るように言われ こちらのサイトを参考に作成させていただいております。 それで一箇所気になったのですが、 http://x68000.q-e-d.net/~68user/net/resolver-3.htmlの > タイプが TXT なら、そのまま表示します。 > これは多分間違い。 > % ./resolver-1.pl www.jp.freebsd.org version.bind txt chaos > リソースデータは「&Sorry, no version string is available」と表示されるが、 > dig や nslookup は「Sorry, no version string is available」となります > (& がない)。 > 先頭の & を削るような規則があるようだが、それが何なのかはわからなかった。 の部分ですが、&の文字コードは0x26(10進数で言う38)。 そしてその後に続く 【Sorry, no version string is available.】 は38文字。 つまりドメイン名の3www8livedoor3com0と同じような意味かなと思います。 そのため先頭の1バイト目を出力しないようにすればdigやnslookupと同じような 表記になるのではと思います。 例) sega.jpを調べるとunknownが帰ってきますが、その中身は 【07 75 6e 6b 6e 6f 77 6e】です。 文字数が32文字以上ないと画面上には何も表示されないので、 それ以下の文字数のところでは結果的にうまく出力されているのかなと思います。 そのため【タイプが TXT なら、そのまま表示します。】ではなく、 【タイプが TXT なら、先頭1バイト以外をそのまま表示します。】かなと思います。 ぜんぜん的外れな事言っていたらすいません。 |