var
Bash 스크립트에 문자열을 보유 하는 변수 가 있습니다.
echo $var
"some string.rtf"
나는이 문자열의 마지막 4 개 문자를 제거하고 새 변수에 결과를 할당 할 var2
그래서,
echo $var2
"some string"
어떻게해야합니까?
답변
먼저, 당신이 원하는 것에 대해 명시해야합니다. 문자열이 끝나고을 .rtf
제거하려는 경우을 .rtf
사용할 수 있습니다 var2=${var%.rtf}
. 접미사가 무엇인지 모르지만 마지막으로 시작하는 모든 것을 제거 .
하려면을 사용할 수 있습니다 var2=${var%.*}
. 모든 것을 처음에만 유지 .
하려면 사용할 수 있습니다 var2=${var%%.*}
. 마지막 두 옵션은 기간이 하나만 있으면 동일한 결과를 갖지만 둘 이상이있을 경우 원하는 것을 결정해야합니다.
항상 정확한 수의 문자를 제거하려면 몇 가지 옵션이 있습니다.
bash를 구체적으로 지정 했으므로 bash 내장으로 시작할 것입니다. 가장 오래 일한 것은 위에서 사용한 것과 동일한 접미사 제거 구문 var2=${var%????}
입니다. 네 문자를 제거하려면을 사용하십시오 . 제거 된 문자 당 하나의 물음표가 필요하므로 더 큰 부분 문자열 길이에서는 다루기가 어려워집니다.
부분 문자열 추출은 약간 더 최신입니다 : var2=${var::${#var}-4}
. 여기 4
에 다른 수의 문자를 제거하기 위해 대신 숫자를 입력 할 수 있습니다 . ( ${#var}
문자열의 길이로 대체되므로 실제로 첫 번째 (길이-4) 문자를 유지하도록 요청합니다.)
최신 버전의 bash (특히 4 이상, MacOS와 함께 제공되는 버전은 작동하지 않음)를 사용하면 단순화 할 수 있습니다 var2=${var::-4}
.
실제로 bash를 사용하지 않고 다른 POSIX 유형 쉘을 사용하는 경우 접미사 제거는 평범한 오래된 대시 (나머지가없는 곳)에서도 여전히 작동합니다. zsh에서는 모두 작동하지만 0
콜론 사이에 공백 을 넣어야합니다 . var2=${var:0:-4}
etc. ksh에서는 0이 필요하며 명시적인 길이 -4 표현식도 사용해야합니다 var2=${var:0:${#var}-4}
.
물론 유틸리티 프로그램의 도움으로 명령 대체를 사용할 수 있습니다. 효과가 충분하지만 var2=$(cut -c -4 <<<"$var")
아마도 가장 짧은 옵션 일 것입니다.
답변
당신은 이렇게 할 수 있습니다 :
#!/bin/bash
v="some string.rtf"
v2=${v::-4}
echo "$v --> $v2"
답변
문자열 끝에서 네 문자를 제거하려면을 사용하십시오 ${var%????}
.
최종 .
사용 후 모든 것을 제거 합니다 ${var%.*}
.
답변
나를 위해 일한 것은 다음과 같습니다.
echo "hello world" | rev | cut -c5- | rev
# hello w
그러나 파일에서 줄을 자르는 데 사용했기 때문에 어색해졌습니다. 실제 용도는 다음과 같습니다.
cat somefile | rev | cut -c5- | rev
cut
일부 시작 위치에서 트리밍하는 것만 가능합니다. 가변 길이 행이 필요한 경우 좋지 않습니다. 따라서이 솔루션 rev
은 문자열을 뒤집고 ( ) 이제 끝 위치와 관련이 있으며 cut
언급 한대로 사용 하고 rev
원래 순서로 되돌립니다 (다시 ).
답변
사용 변수 확장 / 하위 문자열 교체 :
$ {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}
답변
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