[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:34213] Re: 全角文字の判定方法
- From: YAMASHITA Junji (山下 純司) <ysjj@xxxxxxxxxxxx>
- Subject: [debian-users:34213] Re: 全角文字の判定方法
- Date: Wed, 21 Aug 2002 14:52:12 +0900
- List-help: <mailto:debian-users-ctl@debian.or.jp?body=help>
- List-id: debian-users.debian.or.jp
- List-owner: <mailto:debian-users-admin@debian.or.jp>
- List-post: <mailto:debian-users@debian.or.jp>
- List-software: fml [fml 4.0.3 release (20011202/4.0.3)]
- List-unsubscribe: <mailto:debian-users-ctl@debian.or.jp?body=unsubscribe>
- Organization: Unix Users Organization
- X-ml-info: If you have a question, send e-mail with the body "help" (without quotes) to the address debian-users-ctl@debian.or.jp; help=<mailto:debian-users-ctl@debian.or.jp?body=help>
- X-ml-name: debian-users
- X-mlserver: fml [fml 4.0.3 release (20011202/4.0.3)]; post only (only members can post)
- X-spam-level:
- X-spam-status: No, hits=-0.0 required=10.0 tests=IN_REP_TO,ISO2022JP_CHARSET,PLING,ISO2022JP_BODY, CASHCASHCASH,US_DOLLARS_2,UPPERCASE_50_75,WEIRD_PORT version=2.31
- References: <3D618AB9.9090708@xxxxxxxxx> <87fzxa48sn.wl%ysjj@xxxxxxxxxxxx> <87elcu48oc.wl%ysjj@xxxxxxxxxxxx> <3D631E63.3090902@xxxxxxxxx>
- Message-id: <878z30ep31.wl%ysjj@xxxxxxxxxxxx>
- X-mail-count: 34213
- User-agent: Wanderlust/2.9.14 (Unchained Melody) SEMI/1.14.3 (Ushinoya) FLIM/1.14.3 (Unebigorymae) APEL/10.3 Emacs/21.2 (i386-debian-linux-gnu) MULE/5.0 (SAKAKI)
山下 純司です。
>>>>> Tomoo == Tomoo Nomura wrote:
Tomoo> YAMASHITA Junji (山下 純司) 様
Tomoo> 御回答ありがとうございます。
>>> - ch=`echo "$val" | sed --silint 's/.*[^-!@#$%^&*()_+={}:;<>[,.?/"].*/A/p'
>>>
>> + ch=$(echo "$val" | sed --silint 's/.*[^]!@#$%^&*()_+={}:;<>[,.?/\"'"'\`"'-].*/A/p')
>>
>>
Tomoo> 1. - は最初のみならず最後に書けるということですか?
(snip)
man:regex(5) より。
文字 `]' そのものをリストに入れたい場合は、最初の文字として指定
すれば良い (`^' の後に続けるのでも良い)。文字 `-' そのものをリ
ストに入れたい 場合 は、最初か最後の文字とすれば良い。
Tomoo> \"'"'\`"' がよくわかりません。
Tomoo> この中に " ' ` \ が書かれているわけですね。解説願えませんか?
ちょっとだけ勘違いされているに思えます。
man:bash(1)
シングルクォートで文字を囲むと、クォート内部のそれぞれの文字は
文字と して の値を保持します。シングルクォートの間にシングルクォー
トを置くことはできません。これはバックスラッシュを前に付けても
同じです。
ということで、シングルクォート内の \ は \ の意味しか持ちません。
また " も同様です。
ちょっと \" という文字の並びが紛らしかったですね。
ですので \"'"'\`"' の頭にある部分の \" は純粋に \ " の意味です。
これを踏まえて、説明します。
sed -e 's/....\"'"'\`"'.../A/p'
A xxABzzzBC C
この A 〜 C の式は シングルクォートで括られた A〜A と C〜C、ダブルクォー
トで括られた B〜B の 3つのクォートされた文字列から成っています。これが
どのように解釈されるかは
(FOO=foo; BAR=bar; ZOT=zot; echo '$FOO'"$BAR"'$ZOT')
を実行してみると雰囲気がつかめるでしょうか。
($FOObar$ZOT が表示されるはず)
A〜A にある xx部分は先に説明した通り、シングルクォート内部ですから
そのまま \ と " として解釈されます。
C〜C 部分はそのままです。
そしてダブルクォートで括った B〜B 内部にある zzz 部分で
' と ` (\ でエスケープ)を含めているわけです。
結果、Tomooさんの得たい文字列となるはずです。
ご理解いただけるでしょうか。
P.S.
私も試行錯誤してから、この表記でいけることを確認したのですが、
`...` を $(...) 置き換えたのは最後でした。
で、やはり抜けがあったのですが
$(...) を使う場合、' 内で ` を使ってもそのまま受け取られます。
なので
-> + ch=$(echo "$val" | sed --silint 's/.*[^]!@#$%^&*()_+={}:;<>[,.?/\"'"'\`"'-].*/A/p')
+> + ch=$(echo "$val" | sed --silint 's/.*[^]!@#$%^&*()_+={}:;<>[,.?/\"`'"'"'-].*/A/p')
で大丈夫だと思います。
(どっちにしても見辛いのですが)
--
山下 純司 mailto:ysjj@xxxxxxxxxxxx