이 형식의 문자열의 경우:
./my-site.sub.domain.com
.
, -
및 를 제거 /
하고 나머지 부분을 16자로 자르고 싶습니다 .mysitesubdomainc
나는 이미 이것을 했다
mysite="./my-site.sub.domain.com"
mysite=${mysite//[\.|\/|-]//}
mysite=${mysite:0:16}
echo $mysite
mysitesubdomainc
대체와 부분 문자열 추출을 결합하는 방법이 있습니까?
답변1
Bash 내장을 연결할 방법이 없습니다매개변수 확장, 그러나 물론 이 작업은 외부 도구를 사용하여 한 줄로 수행할 수 있습니다 sed
. 예를 들면 다음과 같습니다.
$ sed 's/[\.\/-]//g;s/^\(.\{16\}\).*/\1/' <<< "./my-site.sub.domain.com"
mysitesubdomainc
불행하게도 이는 유지 관리할 수 없는 코드가 되고 Bash 내부를 사용하는 것보다 효율성이 떨어질 수 있으므로 사용하지 않는 것이 좋습니다.
답변2
zsh를 사용하지 않는 이유는 무엇입니까?
$ echo ${${mysite//[\.\/-]/}:0:16}
mysitesubdomainc
(코드를 약간 수정했습니다)
답변3
@l0b0이 말했듯이 이 작업은 셸에서 한 단계로 수행할 수 없다고 생각하지만 외부 도구를 사용하면 충분히 간단합니다(문자열이 변수에 보관되어 있다고 가정 $s
).
$ perl -pe 's#[.\-/]##g' <<<$s | grep -oP .{16}
mysitesubdomainc