2012-08-30 27 views
14

句読点を削除する文字列があります。SEDを使用して[]カッコを置き換えるには

私は

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

で開始しかし、私はそのすべての時間を好きではないHP-UX上の問題を抱えていた、と私は私の文字列に$後に0と何かを得るでしょう、いくつかの時間がdissappearでしょう。だから私はそれを手動でやろうと決めた。

私は、何か他のもので私のsedに大括弧 "[]"を追加することができないことを除いて、私が興味を持っているすべての句読点に作用する次のコードを持っています。エラーが発生するので、何を修正するかわからない。

これは私が現在持っているもので、[]を追加したいと思います。

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

ところで、私はあなたが初期発現にブラケットを配置する必要があるのRedhat & HPに、Solaris上で

+0

あなたの ':punct;'にセミコロンはありますか? –

+1

なぜこれにsedを使用していますか?大量の文字グループをスペースで置き換えるには、 'tr'を使用する方が良いでしょう。 –

+0

@ウィル - はい、それはタイプミスです....私は私のOPを編集することはできません。 trを使って句読点をスペースで置き換えるにはどうすればよいですか?私はTRとSEDの両方で[:punct:]を使用してみましたが、役に立たなかったのです。 – nitrobass24

答えて

1

は私がで=-を入れていた

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

になってしまった最終的なコードです終わり。

19

をKSHを使用しています:

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

最初の文字として ']' を配置することにより開始括弧の直後には、閉じ括弧ではなく文字セットのメンバーとして解釈されます。角かっこの中のどこかに '['を置くと、それはセットのメンバーになります。

[=の間の文字の範囲を作成しようとしていないため、この特定の文字セットについては、特に-を処理する必要があります。だから、-をクラスの最後に置いてください。

+0

そうです。私が元々考えていたことですが、私がそれをしたとき、私はいつも無効な範囲の終了エラーを受け取りました。echo word1 $ word2 | sedの/ [] - = + |〜!@#\ $%^&*(){}:; '\' '' \ "'\'' '\。' '\ /' '\\' []// g ' sed:-e式#1、char 36:無効な範囲の末尾 – nitrobass24

+0

'無効な範囲 'は ' - 'のためです。 –

+0

'--'は、ダッシュを表す文字クラスの最初の文字位置になければなりません。そうでなければ、文字の範囲を示す文字クラスのメタ文字として解釈されるかもしれません。 – potong

3

また、あなたは[反転して]維持したい文字を指定することができます。ここでは

sed 's/[^a-zA-Z0-9]/ /g' 
+0

それは私が気づいていなかった何かが可能でした。 "$"が削除された後の文字列に "$"がある場合を除いて、かなりうまくいくと思われます。エコーワード1 $ word2 | sedの/ [^ a-zA-Z0-9]// g ''出力は' word1'でした。 – nitrobass24

+2

'$ word2'を変数として解釈するのは' echo' word1 $ word2''または'echo word1 \ $ word2' – perreal

+0

私が最終的にやったことは、文字列を変数として保存していたことです...変数を二重引用符で囲みました。 'echo" $ string "| sed 's/[^ a-zA-Z0-9]// g'' – nitrobass24

2

は手動でそれを行うことができます。

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

をこの32句読点文字を削除し、一部の文字の順序は重要です:

  • -この-]
  • のような終わりにする必要があります[]はそのようにする必要があります[][other characters]
  • 'その'\''
  • のようにエスケープ[^
  • [.[=[:で始まっていない、あなたは、なぜすべての解明を持つことができ、ここで$]

で終わらない.]=]:]

  • で終わるよう^で始まっていませんそのhttp://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_03

  • 0

    手にすることができます正規表現のキャプチャテクニックも使用しています(例:下記参照):

    echo "narrowPeak_SP1[FLAG]" | sed -e 's/\[\([a-zA-Z0-9]*\)\]/_\1/g' 
    > narrowPeak_SP1_FLAG 
    
    \[ : literal match to open square bracket, since [] is a valid regex 
    \] : literal match to square close bracket 
    \(...\) : capture group 
    \1 : represents the capture group within the square brackets 
    
    関連する問題