문자열의 처음 N자 뒤에 하이픈을 추가하고 #으로 시작하는 문자열 부분을 제거합니다.

문자열의 처음 N자 뒤에 하이픈을 추가하고 #으로 시작하는 문자열 부분을 제거합니다.

다음과 비슷한 문자열이 있습니다.

391c294eb646cd0f3068cc7ba945071d04327b0ccb181d901466ee3d79c6fe69#3640345

나는 그것이 다음과 같이 보이기를 원합니다 :

391c-294eb646cd0f3068cc7ba945071d04327b0ccb181d901466ee3d79c6fe69

보시다시피 처음 4자 뒤에 하이픈을 추가한 다음 #문자열에서 그 뒤의 모든 문자를 제거하고 싶습니다.

답변1

여기서는 정규식 일치를 사용하는 것이 도움이 됩니다.

str='391c294eb646cd0f3068cc7ba945071d04327b0ccb181d901466ee3d79c6fe69#3640345'
[[ "$str" =~ (.{4})([^#]+) ]] && new="${BASH_REMATCH[1]}-${BASH_REMATCH[2]}"
echo "$new"
391c-294eb646cd0f3068cc7ba945071d04327b0ccb181d901466ee3d79c6fe69

이것BASH_REMATCH배열은 정규식의 캡처 부분을 보유하고 인덱스 0은 전체 정규식과 일치하는 입력 부분을 보유합니다.

답변2

매개변수 확장을 사용합니다.

#!/bin/bash
expected=391c-294eb646cd0f3068cc7ba945071d04327b0ccb181d901466ee3d79c6fe69
input='391c294eb646cd0f3068cc7ba945071d04327b0ccb181d901466ee3d79c6fe69#3640345'

result=${input%#*}  # Remove everything starting with the last #.
result=${result:0:4}-${result:4}  # Insert the dash.

[[ $result == $expected ]] && echo ok

첫 번째 #을 원하면 를 사용하십시오 ${input%%#*}.

관련 정보