如何在shell中逐行读取变量时验证行以数字开头

时间:2012-06-26 11:04:20

标签: shell

我在包含多行的变量中得到了两个字符串之间的内容。 我想检查每一行是否以数字开头,如果是,我将增加一个计数器,并且在该数字之后和下一个数字之前还需要字符串。 假设我有一个变量$ 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包含描述和属性之间的内容,我必须在其上执行所需的操作。

1 个答案:

答案 0 :(得分: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是来自下一行的字符串。