문자열 1:2:3:4:5
이 있고 마지막 필드 ( 5
이 경우) 를 가져오고 싶다고 가정하십시오 . Bash를 사용하여 어떻게합니까? 시도했지만으로 cut
마지막 필드를 지정하는 방법을 모르겠습니다 -f
.
답변
문자열 연산자 를 사용할 수 있습니다 .
$ foo=1:2:3:4:5
$ echo ${foo##*:}
5
이것은 전면에서 ‘:’까지 탐욕스럽게 모든 것을 다듬습니다.
${foo <-- from variable foo
## <-- greedy front trim
* <-- matches anything
: <-- until the last ':'
}
답변
또 다른 방법은 전후를 뒤집는 것입니다 cut
.
$ echo ab:cd:ef | rev | cut -d: -f1 | rev
ef
이렇게하면 마지막 필드 하나만 또는 끝에서 번호가 매겨진 필드 범위를 매우 쉽게 얻을 수 있습니다.
답변
cut을 사용하여 마지막 필드를 얻는 것은 어렵지만 awk 및 perl의 솔루션은 다음과 같습니다.
echo 1:2:3:4:5 | awk -F: '{print $NF}'
echo 1:2:3:4:5 | perl -F: -wane 'print $F[-1]'
답변
상당히 간단한 사용법 (예를 들어 구분 기호를 이스케이프 처리하지 않음)을 가정하면 grep을 사용할 수 있습니다.
$ echo "1:2:3:4:5" | grep -oE "[^:]+$"
5
분류-줄 끝 ($)에서 분리 문자 ([^ :])가 아닌 모든 문자를 찾으십시오. -o는 일치하는 부분 만 인쇄합니다.
답변
일방 통행:
var1="1:2:3:4:5"
var2=${var1##*:}
또 하나는 배열을 사용합니다.
var1="1:2:3:4:5"
saveIFS=$IFS
IFS=":"
var2=($var1)
IFS=$saveIFS
var2=${var2[@]: -1}
또 다른 배열 :
var1="1:2:3:4:5"
saveIFS=$IFS
IFS=":"
var2=($var1)
IFS=$saveIFS
count=${#var2[@]}
var2=${var2[$count-1]}
Bash (버전> = 3.2) 정규식 사용 :
var1="1:2:3:4:5"
[[ $var1 =~ :([^:]*)$ ]]
var2=${BASH_REMATCH[1]}
답변
$ echo "a b c d e" | tr ' ' '\n' | tail -1
e
구분 기호를 줄 바꿈으로 변환하고로 마지막 항목을 선택하십시오 tail -1
.
답변
사용 sed
:
$ echo '1:2:3:4:5' | sed 's/.*://' # => 5
$ echo '' | sed 's/.*://' # => (empty)
$ echo ':' | sed 's/.*://' # => (empty)
$ echo ':b' | sed 's/.*://' # => b
$ echo '::c' | sed 's/.*://' # => c
$ echo 'a' | sed 's/.*://' # => a
$ echo 'a:' | sed 's/.*://' # => (empty)
$ echo 'a:b' | sed 's/.*://' # => b
$ echo 'a::c' | sed 's/.*://' # => c