3
C:\crp\cnp>sed -V

GNU sed version 3.02

Copyright (C) 1998 Free Software Foundation, Inc.......


C:\crp\cnp>type f.f

a a a

a a a

'a'をスペースに置き換えようとしています。

C:\crp\cnp>type f.f | sed -e s/a/\d032/g

d032 d032 d032

d032 d032 d032

なぜそれが機能しないのですか?

スペースや新しい行を検索するのか、置き換えるのかは関係ありません。それらを指定できるようにしたいだけです。動作していないようで、理由はわかりません。

(スペースまたはスペースをfに置き換えても機能しません)

C:\crp\cnp>echo a a | sed s/\d32/f/
a a

注-4.2で動作する可能性がありますが、unxutilshttp: //unxutils.sourceforge.net/にバンドルされているバージョンである3.02'cosに興味があります。

質問への更新-paxdiabloのヒントに感謝します..gnu32winについて、私は現在unxutilsの代わりにそれを使用しています。それはより最新です。スペースを指定できるようになりました。そして、ghostdogのヒント、そしてpaxdiablo、私は二重引用符について見ます。\ d(4.2を使用しているため)またはスペースでスペースを指定しても問題ありません。しかし、それでも新しい行を削除することはできません

C:\ crp> type ff | sed -e "s / \ r \ n / f / g"

ああ

b bb

c cc

C:\ crp> type ff | sed -e "s / \ d013 \ d010 / f / g"

ああ

b bb

c cc

C:\ crp> type ff | sed -e "s / \ x0D \ x0A / f / g"

ああ

b bb

c cc

注:この質問は2010年のものです。現在は2020年です。Gnuwin32は古くなっています(Gnuwin32 sedが最後に更新されたのは2010年で、Sed 4.2.1は2009年のものでした)。Unxutilsはさらに古くなっています。したがって、執筆時点でのGnuwin32は10年前のものであり、Unxutilsは2020年時点で20年前のものです。Cygwinは引き続き最新の状態に保たれており、執筆時点では2017年からのSedv4.4になっています。

4

3 に答える 3

6

面白いエンコーディングではなく、スペース文字自体を使用しないのはなぜですか?のように:

sed -e 's/a/ /g'

価値のあることとして、あなたが与えたコマンドも4.2.1では機能しませんが、引用符を追加すると機能します。したがって、次のように変更することをお勧めします。

sed -e 's/a/\d032/g'

申し訳ありませんが、Windowsを実行していることに気付いたので、おそらくCygWinまたはGnuWin32(または同等のもの)を使用しています。

Windowsでは見積もりの​​動作が異なるため、2つのことを試してください。1つ目は、引用符"の代わりに使用することです。'

sed -e "s/a/ /g"

それ以外の場合、Windowsのエスケープ文字は、次の^ようにスペースをエスケープできるはずです。

sed -e s/a/^ /g

余談ですが、可能であれば、GnuWin32に切り替えることを検討しています。GnuWin32には、sedたとえば、より新しいバージョンがあります。リンク先のWebページに基づいて、2003年以降UnxUtilsが更新されているようには見えません。ここから個々のパッケージを入手できます。coreutilsUNIXテキスト処理ツールキットの大部分が含まれているものを探しています。

ただし、UnxUtilsに固執している場合は、10進コードではなく実際のスペースを使用trしてから、新しい行を削除するために使用します。

tr -d "\n"

trもちろん、 inがその構文を処理できると仮定textutilsします:-)

于 2010-07-26T01:49:44.340 に答える
2

Win XPでも同じ問題が発生し、改行「\n」を印刷しようとしたときに二重引用符が機能しませんでした。解決策は、 http://unxutils.sourceforge.net/の新しいUnxUpdates.zipを使用することでした 。これは「\n」で正しく機能します。

Sedバージョンの状態:GNUsedバージョン4.0.7

于 2012-12-12T10:56:03.330 に答える
0

Windowsでは、二重引用符を使用します

sed "s/a/\d032/g" file

あるいは単に

sed "s/a/ /g" file
于 2010-07-26T02:02:38.643 に答える