字符串中的新行数(整数)

字符串中的新行数(整数)

我想找到字符串中新行的数量,然后在循环中使用这个数字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_command可能是 while 循环、子 shell 中的命令集合((...))或生成输出的简单命令,也some_line_by_line_processing可能是简单命令(如awk)或循环或您需要逐行处理管道第一部分的输出的任何其他东西。

相关内容