0

我在一个包含多行的变量中获得了两个字符串之间的内容。我想检查每一行是否以数字开头,如果是,我将增加一个计数器,并且在该数字之后和下一个数字之前还需要字符串。假设我有一个变量 $line ,其中包含:

1. Create
    create a volume.
2. destroy 
      destroy a volume.

等等。我想计算 var1 中的 10 个操作,var2 中的数字后的字符串和 var3 中的创建、销毁(依此类推)后的文本。如何在 shell 脚本中处理。提前致谢

添加代码:

line=$(sed -n '/Description/,/properties/p'    readme.txt)
echo "$line"



sed -n -e '/^[0-9]/{s/\([0-9]*\).*/\1/;h;n;s/^ *//;H;x;s/\n/ /p;d;}' <<< "$line"
operations=0
while read -r n str ;
do
    let operations+=1
    printf '%d, %d, %s\n' "$operations" "$n" "$str"
done < <(sed -n -e '/^[0-9]/{s/\([0-9]*\).*/\1/;h;n;s/^ *//;H;x;s/\n/ /;p;d;}'  <<<"$line")


printf "Opertions = %d\n' "$operations"
done

其中 $line 包含 Description 和我必须执行所需操作的属性之间的内容。

4

1 回答 1

0

如果我对您的理解正确,那么您想要这样的东西(请注意,我假设您正在使用bash以下某些东西,如果不是这种情况,则必须对其进行一些修改)。

首先,获取项目符号编号加上下一行的字符串。一点点sed就可以了。

sed -n -e '/^[0-9]/{s/\([0-9]*\).*/\1/;h;n;s/^ *//;H;x;s/\n/ /p;d;}' <<<"$line"

接下来我们只需要读取行数,计算行数并将它们存储在变量中。

operations=0
while read -r n str ; do
    let operations+=1
    printf '%d, %d, %s\n' "$operations" "$n" "$str"
done < <(sed -n -e '/^[0-9]/{s/\([0-9]*\).*/\1/;h;n;s/^ *//;H;x;s/\n/ /;p;d;}' <<<"$line")

printf 'Opertions = %d\n' "$operations"

在每个循环n中是来自项目符号的数字,str是来自下一行的字符串。

于 2012-06-26T11:27:20.260 回答