回答:
echo "$string" | tr xyz _
各発生に代わるx
、y
またはz
を_
与えて、A__BC___DEF__LMN
あなたの例では。
echo "$string" | sed -r 's/[xyz]+/_/g'
あなたの例ではx
、繰り返し出現する、、y
またはz
を単一の_
に置き換えA_BC_DEF_LMN
ます。
,[]{}()~
文字列があります。エスケープされた各特殊文字に置き換えたいのですが、'\'
どうすればこれをワンショットで実行できますか?
gsed
バイナリを使用できます。$ brew install gnu-sed
その後$ gsed -r 's/[xyz]+/_/g'
sed -E
(基本的に)sed -r
多くのLinuxディストリビューションと同等です。使用sed 's/[xyz][xyz]*/_/g'
する場合、オプションは必要ありません。もちろん、これは同等tr -s xyz _
なので、sed
ここで実際に必要なものはありません。
tr
そのために使用することはできません。 sed 's/[][{}()~,]/\\&/g'
ただし、フォローアップの質問がある場合は、新しい質問をしてください(もちろん、参照用にここにリンクしてください)。なお、,
及び~
(ただし正規表現メタ文字でない~
に拡張されます$HOME
バッシュ、およびいくつかの他のシェルによっていくつかの位置では、そうでないsh
が)。
Bashパラメータ拡張の使用:
orig="AxxBCyyyDEFzzLMN"
mod=${orig//[xyz]/_}
bash
。他のシェルは機能しない可能性があります(一部は機能します)。
sed
bashに組み込みの置換がある場合に使用するのはなぜですか?
このリンクは役に立ちます:
http://tldp.org/LDP/abs/html/string-manipulation.html
一般に、
$ substringの最初の一致を$ replacementで置き換えるには:
${string/substring/replacement}
$ substringのすべての一致を$ replacementで置き換えるには:
${string//substring/replacement}
編集:これは$ stringという名前の変数に適用されることに注意してください。
AxyzB
ですか?アンダースコア3つまたは1つ?