18

句読点を削除したい文字列があります。

私はから始めました

sed 's/[[:punct:]]/ /g'

しかし、私は HP-UX でいつもそれを好まないという問題を抱えていました。時には 0 を取得$し、文字列の a の後に何かが消えてしまいました。そこで、手動でやってみることにしました。

私が興味を持っているすべての句読点で機能する次のコードがありますが、sedに角括弧「[]」を他のもので追加できないようです。そうしないと、何も置き換えられず、エラーが発生しません。だから私は何を修正すべきかわからない。

とにかく、これは私が現在持っているものであり、追加したいと考えてい[]ます。

sed 's/[-=+|~!@#\$%^&*(){}:;'\'''\"''\`''\.''\/''\\']/ /g'

ところで、Solaris、Redhat、HPでKSHを使用しています

4

5 に答える 5

24

式の早い段階で括弧を配置する必要があります。

sed 's/[][=+...-]/ /g'

']' を左括弧の直後の最初の文字として配置すると、右括弧ではなく、文字セットのメンバーとして解釈されます。括弧内の任意の場所に「[」を配置すると、セットのメンバーになります。

この特定の文字セットについては、と-の間の文字の範囲を構築しようとしていないため、特別に対処する必要もあります。したがって、をクラスの最後に置きます。[=-

于 2012-08-30T19:23:33.550 に答える
5

保持したい文字を指定することもできます[反転あり]:

sed 's/[^a-zA-Z0-9]/ /g'
于 2012-08-30T19:26:33.813 に答える
3

手動で行うことができます:

sed 's/[][\/$*.^|@#{}~&()_:;%+"='\'',`><?!-]/ /g'

これにより、32 個の句読点文字が削除されます。一部の文字の順序は重要です。

  • -このように最後にあるはずです-]
  • []そのようにする必要があります[][other characters]
  • 'そのようにエスケープする必要があります'\''
  • ^のように始まらない[^
  • で始まり、[. [= [: で終わらない.] =] :]
  • で終わらない$]

ここで、そのすべての理由を説明できます http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_03

于 2016-10-21T01:44:20.727 に答える
1

これが私が最終的に得た最終的なコードです

`echo "$string" | sed 's/[^a-zA-Z0-9]/ /g'`

私は最後に入れなければなりませんでし=-

于 2012-09-04T15:14:10.483 に答える