나는 이것을 가지고있다:
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
고정된 경우 "one"을 교체합니다.문자열의 시작 부분에(아니요, 교체할 수 없습니다)
$ echo ${s/#one/X} _one_two_one_two
답변4
bash(사용 중인 경우)에서는 ${arg/one/two}
a 의 첫 번째 항목만 대체합니다 . 모든 첫 번째 double을 this 로 on
바꾸려면 다음을 수행하십시오./
${arg/one/two}
arg=${arg//[^[:alnum:]]/_}
#
두 번째 슬래시는 시작과 끝을 나타내 도록 변경할 수 있습니다 %
.
문자열이 다음과 같은 경우:
➤ 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