변수가 로 설정되어 있습니다 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