英数字以外のすべての文字を下線で置き換えます。

英数字以外のすべての文字を下線で置き換えます。

私はこれを持っています:

second_arg="${second_arg/[^[:alnum:]]/_}"

私がこうすれば:

second_arg="foo::"
second_arg="${second_arg/[^[:alnum:]]/_}"
echo "$second_arg"

それから私は次を得ます:

foo_:

英数字以外のすべてのインスタンスを置き換える方法は?私は次のグローバルスイッチを試しました。

 second_arg="${second_arg/[^[:alnum:]]/_/g}"

しかし、それはうまくいきませんでした。結局、次のようになりました。

foo_:/g

答え1

または、 bash の変数拡張機能を引き続き使用するには、次のようにします。二つスラッシュは、各一致を代替アイテムに置き換えます。

second_arg="${second_arg//[^[:alnum:]]/_}"
                         ^------ here

答え2

そしてsed

$ echo 'This is a test; specifically it is test number 25!' | sed 's/[^a-zA-Z0-9]/_/g'
This_is_a_test__specifically_it_is_test_number_25_

答え3

Jeff Schallerの回答を拡張すると、「検索と置換」パラメータの置換がいくつかのタスクを実行できます。

一方:s="_one_two_one_two"

  1. 変える最初「二人」

    $ echo ${s/two/X}
    _one_X_one_two
    
  2. 変えるみんな「二人」

    $ echo ${s//two/X}
    _one_X_one_X
    
  3. 固定されている場合は「two」を交換してください。文字列の終わりに

    $ echo ${s/%two/X}
    _one_two_one_X
    
  4. 固定されている場合は、「1」を交換してください。文字列の先頭に(いいえ、交換できません)

    $ echo ${s/#one/X}
    _one_two_one_two
    

答え4

bash(使用している場合)は、${arg/one/two}aの最初の項目のみを置き換えます。すべての最初のdoubleをthisにon置き換えるには、次のようにします。/${arg/one/two}

arg=${arg//[^[:alnum:]]/_}

#2番目のスラッシュは開始と終了を示すように変更できます%

文字列が次の場合:

➤ a=one_two_/one_two_one

最初のインスタンスのみを変更するには、次の手順を実行しますone

➤ echo ${a/one/xXx}
xXx_two_/one_two_one

最初の例two:

➤ echo ${a/two/xXx}
one_xXx_/one_two_one

oneパラメータで始まる文字列:

➤ echo ${a/#one/xXx}
xXx_two_/one_two_one

oneパラメータの末尾にある文字列:

➤ echo ${a/%one/xXx}
one_two_/one_two_xXx

文字列/one(スラッシュで始まる):

➤ echo ${a/\/one/xXx}
one_two_xXx_two_one

すべての重複one

➤ echo ${a//one/xXx}
xXx_two_xXx_two_xXx

関連情報