変数から文字列を削除する最速の方法

変数から文字列を削除する最速の方法

変数があるとしましょうfoo

foo=`echo ab cd ef gh`

あなたがした場合echo foo、あなたは得るでしょう:

$ echo $foo
ab cd ef gh

それでは、最速の方法からef始めましょう。$foo

答え1

変数に変数が少なくとも1回含まれていると仮定すると、efPOSIXly:

$ printf '%s\n' "${foo%ef*}${foo##*ef}" 
ab cd  gh

bashkshバリアント(含まれていないposhzsh、およびでは、yash次のものを使用できます。

$ printf '%s\n' "${foo/ef}"

最初の項目を削除するefか、"${foo//ef}"すべての項目を削除します。

答え2

シェルが利用可能パターン交換パターンを削除:

$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd  gh

ノート

  1. 多くの人は、バックティックを使用することが時代遅れだと思います。一般的な現代的な形式の命令の置き換えはです$(...)

  2. バックティックとエコーを使用して生成するfooことは重複します。上記のように、単に文字列を変数に割り当てることができます。

  3. 何が起こっているのかについてのアイデアを提供するために引数を引用符で囲むことなくechoを使用すると、シェルが実行されます。噴射、文字列を3つの部分に分割し、3つの別々のecho引数として提供します。echo対応するパラメータをスペースで連結します。

答え3

これには2つの方法があります。

uc@SVE1411EGXB:~/shop_app/depot2$ foo=`echo ab cd ef gh`
uc@SVE1411EGXB:~/shop_app/depot2$ echo ${foo/ef} 
ab cd gh

または、ストリームエディタAKA ..を使用してnullでsed検索して置き換えます。"ef"

uc@SVE1411EGXB:~/shop_app/depot2$ echo $foo | sed 's/ef//g'
    ab cd  gh

関連情報