조작하고 싶은 문자열이 있습니다. 출력이 바로 되도록 이 문자열을 H08W2345678
어떻게 조작할 수 있습니까 W2345678
?
마찬가지로 마지막 4자를 제거하고 싶으면 어떻게 해야 합니까 H08W2345678
?H08W234
답변1
그냥 bash를 사용하세요(또는 ksh93
이 구문은 or 에서 나옵니다 zsh
):
string="H08W2345678"
echo "${string:3}"
W2345678
echo "${string:0:-4}"
H08W234
자세한 내용은 Wooledge 위키를 참조하세요.문자열 연산.
답변2
$ echo "H08W2345678" | sed 's/^.\{3\}//'
W2345678
sed 's/^.\{3\}//'
처음 세 문자를 찾아서 ^.\{3\}
공백으로 대체합니다. 이는 ^.
문자열 시작 부분( ^
문자열의 시작을 나타냄) 에 있는 모든 문자와 일치하며 \{3\}
이전 패턴과 정확히 3번 일치합니다. 따라서 ^.\{3\}
처음 세 문자가 일치됩니다.
$ echo "H08W2345678" | sed 's/.\{4\}$//'
H08W234
마찬가지로 sed 's/.\{4\}$//'
문자열의 끝을 나타내는 마지막 4개 문자는 공백으로 대체됩니다 $
.
답변3
문자열 앞의 문자를 "제거"/제거하는 방법은 무엇입니까?
조작하고 싶은 문자열이 있습니다. 문자열은 H08W2345678 입니다. 출력이 W2345678이 되도록 어떻게 조작할 수 있나요?
echo "H08W2345678" | cut -c 4-
마찬가지로 H08W2345678에서 마지막 4자를 제거하여 H08W234를 얻으려면 어떻게 해야 합니까?
echo "H08W2345678" | cut -c -7
답변4
그리고:
string="H08W2345678"
3~4개의 문자를 일치시키는 것은 간단해 보입니다(대부분의 쉘에서):
$ printf '%s\t%s\n' "${string#???}" "${string%????}"
W2345678 H08W234
이전 쉘(예: Bourne 쉘)의 경우 다음을 사용하십시오.
$ string=H08W2345678
$ expr " ${string}" : " ...\(.*\)"
W2345678
$ expr " ${string}" : " \(.*\)...." '
H08W234
숫자로 된 문자 수가 필요한 경우 다음을 사용하십시오.
$ expr " ${string}" : " .\{3\}\(.*\)"
W2345678
$ expr " ${string}" : " \(.*\).\{4\}" '
H08W234
물론 이러한 정규 표현식은 sed, awk 및 bash 3.0+에서도 작동합니다.
$ echo "$string" | sed 's/^.\{3\}//'
W2345678
$ echo "$string" | sed 's/.\{4\}$//'
H08W234
$ echo "$string" | awk '{sub(/^.{3}/,"")}1'
W2345678
$ echo "$string" | awk '{sub(/.{4}$/,"")}1'
H08W234
$ r='^.{3}(.*)$'; [[ $a =~ $r ]] && echo "${BASH_REMATCH[1]}"
W2345678
$ r='^(.*).{4}$'; [[ $a =~ $r ]] && echo "${BASH_REMATCH[1]}"
H08W234