문자열의 새 줄 수(정수)

문자열의 새 줄 수(정수)

문자열에서 새 줄의 수를 찾은 다음 이 숫자를 루프의 while제한으로 사용하고 싶습니다.

다음을 사용하여 행 수를 찾아 쓸 수 있습니다.

echo "$MY_STRING" | grep -c '$'

행 수를 정수로 설정하고 이를 while 루프에서 사용하려면 다음을 수행합니다.

MYNUM="$MY_PEERS" | grep -c '$'

그러나 이 줄은 즉시 터미널에 0을 씁니다. 이는 내 문자열의 줄 수가 아닙니다. 또한 MYNUM루프를 실행할 수 없습니다 while. (내가 $MYNUM사용하고 있는 것 while) 루프에서 한계로 사용할 수 있도록 행 수를 어떻게 구합니까 while?

답변1

비록 완전히 이해하지는 못하지만당신은 이것이 필요하며 이것이 그것을 완료할 수 있는 한 가지 방법입니다. 핵심은 $( )출력을 캡처하여 변수에 할당하는 것입니다.

암호:

#!/usr/bin/env bash
IFS='' read -r -d '' TEST_STR <<-'EOF'
    Test text
    quick brown fox
    lazy dog
EOF

NEW_LINE_COUNT=$(echo "$TEST_STR" | wc -l)

echo "$TEST_STR"
echo "$NEW_LINE_COUNT"

결과:

Test text
quick brown fox
lazy dog

4

답변2

개별 장치를 보기 위해 여러 줄 문자열의 줄 수를 계산할 필요가 없습니다. 여기서는 배열 변수와 함께 사용되는 루프를 for다음과 같이 사용할 수 있습니다.

IFS=$'\n' read -d '' -r -a Multi_Line_Str <<STR
    $(printf '%s\n' 'device_'{A..E})
STR

for device in "${Multi_Line_Str[@]}"
do
    echo "<$device>"
done

답변3

여러 줄 문자열이 있는 경우 wc -l이를 사용하여 줄 수를 간단히 계산할 수 있습니다.

printf '%s' "$string" | wc -l

해당 숫자를 변수에 저장합니다.

nlines=$( printf '%s' "$string" | wc -l )

그러나 while 루프를 실행하는 데는 이 숫자가 필요하지 않습니다.

printf '%s' "$string" |
while read -r line; do
   # do something with "$line"
done

각 행에서 수행하는 작업에 따라 while 루프가 전혀 필요하지 않을 수도 있습니다.

printf '%s' "$string" | awk '<some awk script>'

데이터가 생성되는 방식에 따라 데이터를 여러 줄 변수에 전혀 저장할 필요가 없을 수도 있습니다.

some_command | some_line_by_line_processing

여기서는 some_commandwhile 루프, 서브셸의 명령 모음( (...)) 또는 출력을 생성하는 간단한 명령 some_line_by_line_processing일 수도 있고 awk, ) 또는 루프 또는 출력을 처리해야 하는 다른 모든 것일 수도 있습니다. 파이프라인의 첫 번째 부분을 한 줄씩 표시합니다.

관련 정보