Programing

Bash의 문자열에서 마지막 n 문자를 제거하는 방법은 무엇입니까?

lottogame 2020. 6. 9. 07:39
반응형

Bash의 문자열에서 마지막 n 문자를 제거하는 방법은 무엇입니까?


varBash 스크립트에 문자열을 보유 하는 변수 가 있습니다.

echo $var
"some string.rtf"

나는이 문자열의 마지막 4 개 문자를 제거하고 새 변수에 결과를 할당 할 var2그래서,

echo $var2
"some string"

어떻게해야합니까?


당신은 이렇게 할 수 있습니다 :

#!/bin/bash

v="some string.rtf"

v2=${v::-4}

echo "$v --> $v2"

문자열 끝에서 네 문자를 제거하려면을 사용하십시오 ${var%????}.

최종 .사용 후 모든 것을 제거 합니다 ${var%.*}.


사용 변수 확장 / 하위 문자열 교체 :

$ {var / % Pattern / Replacement}

var의 접미사가 Pattern과 일치하면 Replace를 Pattern으로 대체하십시오.

그래서 당신은 할 수 있습니다 :

~$ echo ${var/%????/}
some string

또는

항상 같은 4 글자가 있다면

~$ echo ${var/.rtf/}
some string

항상 끝나는 경우 .xyz:

~$ echo ${var%.*}
some string

문자열 길이를 사용할 수도 있습니다.

~$ len=${#var}
~$ echo ${var::len-4}
some string

또는 단순히 echo ${var::-4}


나를 위해 일한 것은 다음과 같습니다.

echo "hello world" | rev | cut -c5- | rev
# hello w

그러나 파일에서 줄을 자르는 데 사용했기 때문에 어색해졌습니다. 실제 용도는 다음과 같습니다.

cat somefile | rev | cut -c5- | rev

cut가변적 인 길이의 행이 필요한 경우 나쁜 시작 위치에서 트리밍하는 것만 가능합니다. 따라서이 솔루션 rev은 문자열을 뒤집고 ( ) 이제 끝 위치와 관련이 있으며 cut언급 한대로 사용 하고 rev원래 순서로 되돌립니다 (다시 ).


sed를 사용할 수 있습니다.

sed 's/.\{4\}$//' <<< "$var"

예:

$ var="some string.rtf"
$ var1=$(sed 's/.\{4\}$//' <<< "$var")
$ echo $var1
some string

나는 다음을 시도했고 그것은 나를 위해 일했다 :

#! /bin/bash

var="hello.c"
length=${#var}
endindex=$(expr $length - 4)
echo ${var:0:$endindex}

산출: hel


이것은 문자열의 크기를 계산하여 나를 위해 일했습니다.
반환해야 할 값을 에코 한 다음 아래와 같이 저장해야합니다.

removechars(){
        var="some string.rtf"
        size=${#var}
        echo ${var:0:size-4}  
    }
    removechars
    var2=$?

어떤 문자열


아래 예제가 도움이되기를 바랍니다.

echo ${name:0:$((${#name}-10))} -> ${name:start:len}

  • 위의 명령에서 name은 변수입니다.
  • start 문자열 시작점입니다
  • len 제거해야하는 문자열의 길이입니다.

예:

    read -p "Enter:" name
    echo ${name:0:$((${#name}-10))}

산출:

    Enter:Siddharth Murugan
    Siddhar

Note: Bash 4.2 added support for negative substring

참고URL : https://stackoverflow.com/questions/27658675/how-to-remove-last-n-characters-from-a-string-in-bash

반응형