文字列の新しい行数(整数)

文字列の新しい行数(整数)

文字列内の新しい行の数を見つけて、この数をループのwhile制限として使用したいと思います。

以下を使用して行数を参照して書き込むことができます。

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

行数を整数に設定し、これをwhileループで使用するには、次のようにします。

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

ただし、この行はすぐに端末にゼロを書き込みます。これは私の文字列の行数ではありません。また、MYNUMループを実行できませんwhile。 (私が$MYNUM使用しているものwhile)ループで制限として使用できるように行数をどのように取得しますかwhile

答え1

完全には理解していませんが、なぜあなたはこれが必要であり、これがそれを完了する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ループ、サブシェルのコマンドバー((...))、または出力を生成する単純なコマンド、または)、またはループまたは出力を処理する必要がある他のすべてです。パイプラインの最初の部分を1行ずつ表示します。some_line_by_line_processingawk

関連情報