私はこれを持っています:
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"
変える最初「二人」
$ echo ${s/two/X} _one_X_one_two
変えるみんな「二人」
$ echo ${s//two/X} _one_X_one_X
固定されている場合は「two」を交換してください。文字列の終わりに
$ echo ${s/%two/X} _one_two_one_X
固定されている場合は、「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