AxxBCyyyDEFzzLMNのような文字列があり、x、y、およびのすべての出現箇所を置き換えます。 (===)zと_。
どうすればこれを達成できますか?
私はecho "$string" | tr 'x' '_' | tr 'y' '_'
がうまくいくことを知っていますが、私はパイプを使わずに一度にそれをしたいのです。
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
を与えるでしょう。
Bashパラメータ展開 を使う:
orig="AxxBCyyyDEFzzLMN"
mod=${orig//[xyz]/_}
このリンクは役に立ちます。
http://tldp.org/LDP/abs/html/string-manipulation.html
一般に、
$ substringの最初の一致を$ replacementに置き換えます。
${string/substring/replacement}
$ substringのすべての一致を$ replacementに置き換えます。
${string//substring/replacement}
編集:これは$ stringという名前の変数に適用されることに注意してください。
read filename ;
sed -i 's/letter/newletter/g' "$filename" #letter
^あなたが必要とする限りこれらの多くを使用しなさい、そしてあなたはあなた自身のBASIC暗号化を作ることができる
これは、複数の連続するオカレンスを単一の_
に置き換えるShellパラメータ展開を使用したソリューションです。
$ var=AxxBCyyyDEFzzLMN
$ echo "${var//+([xyz])/_}"
A_BC_DEF_LMN
+(pattern)
パターンは拡張パターンマッチングを必要とします。
shopt -s extglob
あるいは、tr
の-s
( "squeeze")オプションを使用します。
$ tr -s xyz _ <<< "$var"
A_BC_DEF_LMN