Cygwin なんでも掲示板

一覧最新記事過去一覧 | 検索FAQアンテナHOME
(新規投稿・発言はできません)


スレッド

└◇1686:
sedコマンド パラメータ* [のど飴] 11/30 23:17

 ├◇1687:Re:sedコマンド パラメータ* [はじめ] 12/01
 │└◇1689:grep(BRE), egrep(ERE) [nil] 12/01
 │ └◇1690:Re:grep(BRE), egrep(ERE) [はじめ] 12/01
 ├◇1688:Re:sedコマンド パラメータ* [MSだす。] 12/01
 └◇1691:Re:sedコマンド パラメータ* [のど飴] 12/02
  └◇1705:Re[2]:sedコマンド パラメータ* [な] 12/03
   └◇1706:Re[3]:sedコマンド パラメータ* [な] 12/03
    └◇1739:Re[4]:sedコマンド パラメータ* [のど飴] 12/07
     └◇1801:Re[5]:sedコマンド パラメータ* [MSだす。] 12/17 <


1686● sedコマンド パラメータ*[ のど飴 ] 2003 11/30 23:17
cygwinをインストールして、DOS画面から
sedコマンドを実行させる。
このとき、sedコマンドのパラメータに、「*」を入れると、
「直前文字の繰り返し」という本来の解釈を認識してくれていないみたい。
カンマ区切りで連続する空白文字を除去する場合、「sed -e 's/ *,/,'」としているんだけど。。。
処理させるためには、どうすればいいのか、誰か教えてください。
スレッド一覧


1687● Re:sedコマンド パラメータ*[ はじめ ] 2003 12/01 01:20
[PR] 使用環境を書くように習慣付けよう。[PR]
#---------------------------

回答:「sed -e 's/ *,/,/g' 」とする。

実施例:
cmd.extにて
#--- ここから
C:\cygwin\tmp> type foo.txt
a ,b ,c
aa ,bb,c, ,d ,
a,aa,bbbb ,c ,ddd
C:\cygwin\tmp> sed -e 's/ *,/,/g' < foo.txt
a,b,c
aa,bb,c,,d,
a,aa,bbbb,c,ddd
C:\cygwin\tmp>
#--- ここまで

確認環境:
Windows 2000 Pro + SP4

% cygcheck -sl | grep '^(sed|cygwin)'
cygwin 1.5.5-1
cygwin-doc 1.3-6
sed 4.0.7-3

(※特記事項:
JEを入れています。りうさんほか、皆さんありがとう。)

はじめ
スレッド一覧


1689● grep(BRE), egrep(ERE)[ nil ] 2003 12/01 07:26
>% cygcheck -sl | grep '^(sed|cygwin)'
>cygwin 1.5.5-1
>cygwin-doc 1.3-6
>sed 4.0.7-3

うう、本題で無いので恐縮ですが、微妙に正しくない気が…

        http://www.kt.rim.or.jp/~kbk/regex/regex.html
        http://www.mnet.ne.jp/~nakama/
        http://www2.famille.ne.jp/~akio1998/l_grep.html#regular2

grep, egrep にもいろいろな実装がありますが、

        egrep '^(sed|cygwin)'                # 一般的に(POSIX)
        grep '^\(sed\|cygwin\)'                # GNU拡張

(BRE では |, \| が使えない)

>(※特記事項:JEを入れています。

Cygwin_JE を入れてないので未確認ですし、setup.ini には multi-byte
grep のパッケージが見当たりませんでしたが、まさか JE で grep の仕
様が変わってるわけではないですよね。

(それと cygcheck -cd | ... でいいと思うけど)
スレッド一覧


1690● Re:grep(BRE), egrep(ERE)[ はじめ ] 2003 12/01 17:07
うわ、すいません。

(1) grepの挙動について。
先にgrepと書いていた部分は、egrepです。
# 投稿時にコマンド行部分も copy&paste するべきでした。
したがいまして JE には関係ないはずです。
御指摘ありがとうございました。

(2) cygcheck について
御教示ありがとうございます。
#以前にもバージョン確認方法を教わったはず。
#同様の間違いを複数回するようでは駄目ですね。>私

ということで、オフトピックで申し訳ないですが、
nilさんに感謝を込めてお詫びと訂正でした。
スレッド一覧


1688● Re:sedコマンド パラメータ*[ MSだす。 ] 2003 12/01 01:20
>カンマ区切りで連続する空白文字を除去する場合、
こういうことでいいのでしょうか

$ cat junk
abc , djkel , dkjkesa

$ sed 's/ *, */,/g' junk
abc,djkel,dkjkesa

$

これはCygwin の話題ではないような。
スレッド一覧


1691● Re:sedコマンド パラメータ*[ のど飴 ] 2003 12/02 01:17
はじめさん、MSだす。さん、nilさん、レスありがとうございます。
ご指摘の通り、Cygwinとは無関係の問題でした。

重ねての質問で恐縮なのですが、連続する全角の空白文字を除去する場合について
教えていただきたいです。

[使用環境]
windowsNT 4.0

[実行例]------実際に行ないたいのは「★」ではなく全角スペースです。
D:\>type D:\cygwin\a.txt
★,あいう★★★,えお★★,
か,き★★,★くけ★こ,
さ★★し,すせそ,★★,

D:\>sed -e 's/★*,/,/g' D:\cygwin\a.txt > D:\cygwin\b.txt

D:\>type D:\cygwin\b.txt
,あいう★★,えお★,
か,き★,★くけ★こ,
さ★★し,すせそ,★,


★1つ分だけが除去されている状態です。
試しにUNIX上で実行してみると。。。
---------------------
,あいう,えお,
か,き,★くけ★こ,
さ★★し,すせそ,,
---------------------
と狙いどおりになるため、cygwin上の問題ではないかと思います。

nilさんに教えていただいたサイトのひとつによると
「処理系によっては文字の繰り返ししか認めてみないものもあります。」
とありますが、半角の空白なら問題ないので、『認めてくれている』ものと考えています。

宜しくお願いします。
スレッド一覧


1705● Re[2]:sedコマンド パラメータ*[ な ] 2003 12/03 16:26
> 重ねての質問で恐縮なのですが、連続する全角の空白文字を除去する場合について
> 教えていただきたいです。

> ★1つ分だけが除去されている状態です。

cygwinのsedは日本語化/国際化されていませんので、
正しい動作です。

sed-jaやsed-mbなどを調べてください。

> と狙いどおりになるため、cygwin上の問題ではないかと思います。

違います。

> nilさんに教えていただいたサイトのひとつによると
> 「処理系によっては文字の繰り返ししか認めてみないものもあります。」
> とありますが、半角の空白なら問題ないので、『認めてくれている』ものと考えています。

日本語化/国際化されていないソフトウェアでは、全角空白は
0x81, 0x40 の二文字として扱われます。
正規表現で '*' は単一の正規表現式の繰り返しですので、
0x81 の後ろに 0x40 が繰り返された場合の指定になります。

あえてやるのであれば、sed -e 's/\(★\)*,/,/g' といった
あたりでしょうか。
スレッド一覧


1706● Re[3]:sedコマンド パラメータ*[ な ] 2003 12/03 17:08
ちょっと補足。

> 日本語化/国際化されていないソフトウェアでは、全角空白は
> 0x81, 0x40 の二文字として扱われます。

全角空白が0x81,0x40になるのはSJISの場合です。
cygwinの話なので、SJISだと仮定していました。

> 正規表現で '*' は単一の正規表現式の繰り返しですので、
例に挙げられた sed -e 's/ *,/,/g' の場合には、
> 0x81 の後ろに 0x40 が繰り返された場合の指定になります。

なお、UNIXで期待した動作になったというのは、
最近の商用Unixではsedなどのユーティリティも
国際化されているためです。

また、VineLinuxなどでは、日本語化されたsedを
システムの標準にしている場合もあるようです。
スレッド一覧


1739● Re[4]:sedコマンド パラメータ*[ のど飴 ] 2003 12/07 23:52
なさん、ご返信ありがとうございます。
原因とその背景が、すごく良くわかりました。
cygwinの問題というわけではなかったのですね。
にも関わらず、分かりやすい解答ありがとうございました。
スレッド一覧


1801● Re[5]:sedコマンド パラメータ*[ MSだす。 ] 2003 12/17 17:47
最近気がついたのですが、
http://www.sixnine.net/cygwin/index_ja.html
の"JE"にjsedが入ってます。
スレッド一覧

早田のホームページへ
CGIROOM