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

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

변수가 로 설정되어 있습니다 var='type_cardio_10-11-2017'. 변수에서 마지막 10자를 제거하고 나머지 값을 에 추가해야 합니다 var2.

다음 스크립트를 사용해 보았지만 예상대로 작동하지 않습니다.

var=type_cardio_10-11-2017
var2=${var} | cut -f1 -d "_"
echo ${var2}

내가 원하는 출력은심장형.

답변1

마지막 것 이후의 모든 것을 제거 _하고 var결과를 다음에 할당 하려면 다음을 수행하십시오 var2.

var2=${var%_*}

매개변수 확장은 주어진 변수 값의 끝에서 ${parameter%word}패턴을 제거합니다 word(이 경우)._*

POSIX 표준에서는 이를 호출합니다."최소 접미사 패턴 제거"매개변수 확장.

마지막 밑줄과 그 뒤의 10자를 제거하려면 다음을 사용하십시오.

var2=${var%_??????????}

날짜 문자열에 해당하는 문자(예: 예제의 문자)를 제거하려면 다음을 사용하십시오.

var2=${var%_[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]}

사용하는 모드는 일치를 얼마나 신중하게 수행하려는지에 따라 달라집니다.

답변2

실제로 후행을 제거하고 싶습니다.11문자열의 문자는 다음과 같습니다.

$ var=type_cardio_10-11-2017
$ var2=${var%???????????}
$ echo "$var2"
type_cardio

답변3

또 다른 방법 bash:

echo "${var::-10}"

또는 이전 버전에서는:

echo "${var::${#var}-10}" #or
echo "${var: : -10}"

답변4

합계를 추가하는 것은 쉬운 부분 var입니다 . var2이렇게 결합하면 됩니다 new_var="$var$var2". 만약 당신이 무엇진짜당신이 원한다는 뜻이에요가게var로 자르면 다른 사용자가 여기에 제시한 명령과 내 답변을 해당 섹션 에 넣을 수 var2있습니다 .var2=$(...)$()

주요 부분은 이 10개의 문자를 제거하는 것입니다. 원하는 부분을 추출하는 방법에는 여러 가지가 있습니다 var.

  • printf(이식성이 뛰어나고 특정 쉘에 의존하지 않음)

    $ printf "%.11s\n"  "$var"                                                                                                                                                                      
    type_cardio
    
  • awk

    $ var=type_cardio_10-11-2017                                                                                                                                                                    
    $ awk -v awk_var="$var"  'BEGIN{print substr(awk_var,0,length(awk_var)-11)}'                                                                                                                    
    type_cardio
    

    또는 printf여기에서 트릭을 사용할 수도 있습니다.

    $ echo "$var" | awk '{printf "%.11s\n",$0}'                                                                                                                                                     
    type_cardio
    
  • egrep

    $ echo "$var" | egrep  -o '^.{0,11}'                                                                                                                                                           
    type_cardio
    
  • perl:

    $ echo "$var" | perl -lne 'print substr($_,0,11)'                                                                                                                                               
    type_cardio
    
  • python:

    $ python -c 'import sys;print sys.argv[1][0:11] ' "$var"                                                                                                                                        
    type_cardio
    

관련 정보