bash의 문자열에서 공백 ( )을 점 (
.
)으로 바꾸는 것이 가능해야합니다 .
나는 이것이 매우 간단하다고 생각하지만, 새로운 용도 이므로이 사용을 위해 비슷한 예제를 수정하는 방법을 알 수 없습니다.
bash의 문자열에서 공백 ( )을 점 (
.
)으로 바꾸는 것이 가능해야합니다 .
나는 이것이 매우 간단하다고 생각하지만, 새로운 용도 이므로이 사용을 위해 비슷한 예제를 수정하는 방법을 알 수 없습니다.
답변:
인라인 쉘 문자열 교체를 사용하십시오. 예:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
자세한 내용은 http://tldp.org/LDP/abs/html/string-manipulation.html 을 참조하십시오.
tr
할 수있는 작업의 종류에 따라 당신이 맞아요을! :! ... 사용 가능한 메모리 및 하드웨어 자원에 따라 ...하지만, 전용 도구를보다 효율적으로있어!
$'\n'
다음 tr
과 같이 사용할 수 있습니다 .
tr " " .
예:
# echo "hello world" | tr " " .
hello.world
보낸 사람 man tr
:
설명
표준 입력에서 표준 출력으로 문자를 번역, 압착 및 / 또는 삭제합니다.
bash에서는 구문 으로 문자열에서 패턴 교체 를 수행 할 수 있습니다 ${VARIABLE//PATTERN/REPLACEMENT}
. 첫 번째 항목 만 바꾸지 /
말고 그대로 사용하십시오 //
. 패턴은 파일 글로브와 같은 와일드 카드 패턴입니다.
string='foo bar qux'
one="${string/ /.}" # sets one to 'foo.bar qux'
all="${string// /.}" # sets all to 'foo.bar.qux'
경로를 위해 이것을 시도하십시오 :
echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
큰 따옴표로 묶인 문자열 내부의 공백을 +
노래로 바꾼 다음+
부호를 백 슬래시로 바꾼 다음 큰 따옴표를 제거 / 바꾸십시오.
Cygwin의 경로 중 하나의 공백을 대체하기 위해 이것을 사용해야했습니다.
echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
sed
. 인용문은 관련이 없습니다.
tr
긴 문자열을 선호 할 수 있습니다. 내 시스템tr
에서1000
문자 보다 많은 문자열에서 시작하는 bash보다 성능이 우수 합니다. bash의 시간 복잡성이 선형보다 나빠 보입니다. 작은 시험 :x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}"
. 1M의 문자열 길이 (20 ^ 2 =)tr
했다0.04s
배시 5.0.11이 걸렸다17s
. 2M가 함께tr
했다0.07s
(예상)하지만 배쉬했다69s
(2 회 문자열 길이만큼 4 번).