Jak zliczyć liczbę kropek w łańcuchu w BASH? Na przykładZliczanie liczby kropek w ciągu znaków
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
# Variable VAR contains 5 dots
Jak zliczyć liczbę kropek w łańcuchu w BASH? Na przykładZliczanie liczby kropek w ciągu znaków
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
# Variable VAR contains 5 dots
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
echo $VAR | tr -d -c '.' | wc -c
tr -d
usuwa podane znaki z wejścia. -c
przyjmuje odwrotność podanych znaków. razem, to wyrażenie usuwa non "." znaków i zlicza uzyskaną długość za pomocą wc
.
Można to zrobić łącząc grep
i wc
polecenia:
echo "string.with.dots." | grep -o "\." | wc -l
Objaśnienie:
grep -o # will return only matching symbols line/by/line
wc -l # will count number of lines produced by grep
Albo można użyć tylko grep
do tego celu:
echo "string.with.dots." | grep -o "\." | grep -c "\."
rozwiązaniem w czystej bash
:
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
VAR_TMP="${VAR//\.}" ; echo $((${#VAR} - ${#VAR_TMP}))
lub nawet tylko jako chepner wymienić:
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
VAR_TMP="${VAR//[^.]}" ; echo ${#VAR_TMP}
Lub 'DOTS = $ {VAR_TMP // [^.]}; echo $ {# DOTS} '. – chepner
VAR="s454-da4_sd.fs_84-df.f-sds.a_as_d.a-565sd.dasd"
dot_count=$(IFS=.; set $VAR; echo $(($# - 1)))
Działa to poprzez ustawienie separator pól na "". w podpowłoce i ustawianie parametrów pozycyjnych poprzez dzielenie wyrazów ciągu znaków. Przy N punktach będą dostępne parametry pozycyjne N + 1. Kończymy odejmując jeden od liczby parametrów pozycyjnych w podpowłoce i powtarzając, że ma zostać przechwycony w dot_count
.
Spowoduje to usunięcie początkowych i końcowych kropek. – nneonneo
awk
alternatywnie:
echo "$VAR" | awk -F. '{ print NF - 1 }'
wyjściowa:
5
tymczasowo ustawienie IFS
, czystą Basha, NO podprocesów:
IFS=. VARTMP=(X${VAR}X) # avoid stripping dots
echo $((${#VARTMP[@]} - 1))
wyjściowa:
5
Możliwy duplikat [liczba wystąpień znaku w ciągu za pomocą bash] (http://stackoverflow.com/questions/16679369/count-occurrences-of-char-in-string-using-bash) –