句読点を削除したい文字列があります。
私はから始めました
sed 's/[[:punct:]]/ /g'
しかし、HP-UXでいつもそれが気に入らないという問題があり、文字列の$
の後に0が表示されて何かが消えてしまうことがありました。だから私はそれを手動でやろうと決心しました。
私は興味のあるすべての句読点で機能する次のコードを持っていますが、sedに角かっこ「[]」を他のもので追加できないようです。それ以外の場合は何も置き換えられず、エラーは発生しません。だから私は何を修正すべきかわかりません。
とにかくこれは私が現在持っているものであり、[]
を追加したいと思います。
sed 's/[-=+|~!@#\$%^&*(){}:;'\'''\"''\`''\.''\/''\\']/ /g'
ところで、Solaris、Redhat、HPでKSHを使用しています
これが私が最終的に得た最終的なコードです
`echo "$string" | sed 's/[^a-zA-Z0-9]/ /g'`
最後に=
と-
を付けなければなりませんでした。
式の早い段階で角かっこを配置する必要があります。
sed 's/[][=+...-]/ /g'
']'を開始ブラケットの直後の最初の文字として配置することにより、終了ブラケットではなく文字セットのメンバーとして解釈されます。角かっこ内の任意の場所に「[」を配置すると、セットのメンバーになります。
この特定の文字セットでは、-
と[
の間に文字範囲を作成しようとしないため、=
も特別に処理する必要があります。したがって、クラスの最後に-
を置きます。
手動で行うことができます:
sed 's/[][\/$*.^|@#{}~&()_:;%+"='\'',`><?!-]/ /g'
これにより、32個の句読文字が削除されます。一部の文字の順序は重要です。
-
はこのように最後にある必要があります-]
[]
はそのようなものでなければなりません[][other characters]
'
はそのようにエスケープする必要があります'\''
^
のように[^
で始まらない[.
[=
[:
で始まり、.]
=]
:]
で終わるのではありません$]
で終わらないここでは、そのすべての理由を説明できます http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_
正規表現キャプチャ手法を使用して処理することもできます(例:以下):
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