다음 명령을 실행하십시오.
echo "hello-world" | tr "hello-world" "Hello World"
반품 Heddd-ddddd
. 나는 그것을 돌려받고 싶다 Hello World
. 나는 이것이 tr
매개변수가 맨페이지 SET1
의 범위로 해석되기 때문이라고 생각합니다.tr
CHAR1-CHAR2
all characters from CHAR1 to CHAR2 in ascending order
나는 또한 다음을 시도했습니다.
echo ${"hello-world//hello-world/Hello World"}
반품:
bash: ${"hello-world//hello-world/Hello World"}: bad substitution
이를 수행하기 위해 선호되는 방법은 무엇입니까(문자열의 모든 인스턴스를 다른 문자열로 변환)? 또는 다른 프로그램을 사용합니다 tr
.
답변1
우리가 탈출해야 한다는 것뿐이야-
echo "hello-world" | tr "hello\-world" "Hello World"
h
다행스럽게도 연결된 결과를 제공하기 위해 컨텍스트에 후행 OR이 없습니다 w
. 따라서 각 문자열의 첫 번째 문자를 대문자로 바꾸는 것이 좋습니다.
사용sed
echo "hello-world" | sed 's/-/ /g;s/\<./\U&/g'
답변2
당신은 할 수
- 하이픈을 다음으로 변환
tr
각 단어의 첫 글자를 대문자로 변환하고 각 단어의 나머지 부분을
($i,2)
변환 없이 인쇄합니다.awk
$ echo 'hello-world-peace' | tr '-' ' ' | \ awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }} {print}' Hello World Peace
awk
전체 작업 에 사용할 수도 있습니다 .
- 하이픈을 다음으로 변환
gsub
- 각 단어의 첫 글자를 대문자로 변환
toupper
($i,2)
변환 없이 각 단어의 나머지 부분을 인쇄합니다.echo 'hello-world-peace' | \ awk '{gsub("-"," "); for(i=1;i<=NF;i++) \ { $i=toupper(substr($i,1,1)) substr($i,2) }} {print}'
답변3
이것은 sed
작동합니다:
echo "hello-world" |sed -E -n 's/.(.*)-.(.*)/H\1 W\2/p'
산출:
Hello World