문자열 앞의 문자를 "제거"/제거하는 방법은 무엇입니까?

문자열 앞의 문자를 "제거"/제거하는 방법은 무엇입니까?

조작하고 싶은 문자열이 있습니다. 출력이 바로 되도록 이 문자열을 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

관련 정보