回答:
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。他のシェルは機能しない可能性があります(一部は機能します)。
sedbashに組み込みの置換がある場合に使用するのはなぜですか?
このリンクは役に立ちます:
http://tldp.org/LDP/abs/html/string-manipulation.html
一般に、
$ substringの最初の一致を$ replacementで置き換えるには:
${string/substring/replacement}
$ substringのすべての一致を$ replacementで置き換えるには:
${string//substring/replacement}
編集:これは$ stringという名前の変数に適用されることに注意してください。
AxyzBですか?アンダースコア3つまたは1つ?