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