bash에서 변수의 줄 수를 어떻게 계산합니까?
문자열이 저장된 변수가 있고 그 안에 줄이 있는지 확인해야합니다.
var=`ls "$sdir" | grep "$input"`
의사 코드 :
while [ ! $var's number of lines -eq 1 ]
do something
그것이 그것을 확인하는 방법에 대한 나의 생각입니다. echo $var | wc -l
작동하지 않습니다 - 항상 말한다 1
, 그것은에도 불구하고 3
.
echo -e
잘 작동하지 않습니다.
따옴표가 중요합니다.
echo "$var" | wc -l
여기에 게시 된 허용 된 답변 및 기타 답변은 빈 변수 (정의되지 않거나 빈 문자열)의 경우 작동하지 않습니다.
이것은 작동합니다 :
echo -n "$VARIABLE" | grep -c '^'
예를 들면 :
ZERO=
ONE="just one line"
TWO="first
> second"
echo -n "$ZERO" | grep -c '^'
0
echo -n "$ONE" | grep -c '^'
1
echo -n "$TWO" | grep -c '^'
2
bash에서 여기 문자열 을 사용하는 또 다른 방법 :
wc -l <<< "$var"
이 주석 에서 언급했듯이 여기에 문자열 이이 경우 줄 바꿈 문자를 추가 $var
하기 때문에 비어 있으면 0 줄 대신 1 줄이됩니다 ( 설명 ).
"wc -l"을 "wc -w"로 대체하여 줄 대신 단어 수를 계산할 수 있습니다. 이것은 새로운 줄을 계산하지 않으며 계속하기 전에 원래 결과가 비어 있는지 테스트하는 데 사용할 수 있습니다.
더 간단한 버전의 @Julian의 대답은 후행이 있거나없는 모든 문자열에 대해 작동합니다. \ n (단 하나의 후행이 \ n 만 포함 된 파일을 비어있는 것으로 간주합니다) :
printf "%s" "$a" | grep -c "^"
- 0 반환 : 설정되지 않은 변수, 빈 문자열, 맨 줄 바꿈이 포함 된 문자열
- 1 반환 : 후행 개행이 있거나없는 비어 있지 않은 모든 줄
- 기타
산출:
# a=
# printf "%s" "$a" | grep -c "^"
0
# a=""
# printf "%s" "$a" | grep -c "^"
0
# a="$(printf "")"
# printf "%s" "$a" | grep -c "^"
0
# a="$(printf "\n")"
# printf "%s" "$a" | grep -c "^"
0
# a="$(printf " \n")"
# printf "%s" "$a" | grep -c "^"
1
# a="$(printf " ")"
# printf "%s" "$a" | grep -c "^"
1
# a="aaa"
# printf "%s" "$a" | grep -c "^"
1
# a="$(printf "%s" "aaa")"
# printf "%s" "$a" | grep -c "^"
1
# a="$(printf "%s\n" "aaa")"
# printf "%s" "$a" | grep -c "^"
1
# a="$(printf "%s\n%s" "aaa" "bbb")"
# printf "%s" "$a" | grep -c "^"
2
# a="$(printf "%s\n%s\n" "aaa" "bbb")"
# printf "%s" "$a" | grep -c "^"
2
grep이 결과를 반환하지 않으면 가장 많이 투표 한 답변은 실패합니다.
Homer Simpson
Marge Simpson
Bart Simpson
Lisa Simpson
Ned Flanders
Rod Flanders
Todd Flanders
Moe Szyslak
wiggums=$(grep -iF "Wiggum" characters.txt);
num_wiggums=$(echo "$wiggums" | wc -l);
echo "There are ${num_wiggums} here!";
목록에 1
Wiggum 이 없다고 말할 것 입니다.
Instead, you need to do one extra check to see if the variable is empty (-z
, as in "is zero"). If grep didn't return anything, the variable will be empty.
matches=$(grep -iF "VanHouten" characters.txt);
if [ -z "$matches" ]; then
num_matches=0;
else
num_matches=$(echo "$matches" | wc -l);
fi
echo "There are ${num_matches} VanHoutens on the list";
No one has mentioned parameter expansion, so here are a couple of ways using pure bash.
Method 1
Remove non-newline characters, then get string length + 1. Quotes are important.
var="${var//[!$'\n']/}"
echo $((${#var} + 1))
Method 2
Convert to array, then get array length. For this to work, don't use quotes.
IFS=$'\n' # let's make sure we split on newline chars
var=(${var})
echo ${#var[@]}
참고URL : https://stackoverflow.com/questions/6314679/in-bash-how-do-i-count-the-number-of-lines-in-a-variable
'program story' 카테고리의 다른 글
Vim의 내용이 아닌 HTML 태그를 삭제하는 방법 (0) | 2020.11.26 |
---|---|
DisplayName 속성 값 가져 오기 (0) | 2020.11.26 |
C #의 DateTime에서 날짜 부분 추출 (0) | 2020.11.26 |
Jade에서 인라인 요소를 만드는 간결한 방법은 무엇입니까? (0) | 2020.11.26 |
현재까지 'x'시간 추가 (0) | 2020.11.26 |