如何将连续数字添加到文本文件中的字符串中,其中两个字符串各自具有相同的数字?
例子:
id="picture-"
id="picture-"
id="picture-"
id="picture-"
...
结果:
id="picture-1"
id="picture-1"
id="picture-2"
id="picture-2"
...
该数字不在行中的最后位置。我已经尝试过这个:
perl -pe 's/picture\-/$& . ++$n/ge' index.txt
但这会将数字相加,每个字符串都会得到另一个数字。
任何帮助,将不胜感激。
答案1
你总是可以这样做:
perl -pe 's/picture-\K/1+($n++>>1)/ge' index.txt
要从头开始生成数据:
seq -f 'id="picture-%.0f"' 10 | sed p
答案2
perl
对你的一句话稍作修改:
perl -mPOSIX -pe 's/picture\-/$& . POSIX::ceil(++$n\/2)/ge' index.txt
附加的数字现在是 n 的一半,四舍五入,因此结果只会每隔一行增加一次。
答案3
$ awk -F '"' 'BEGIN { OFS=FS; n=1 } { $2 = sprintf("%s%d", $2, ++n/2); print }' file
id="picture-1"
id="picture-1"
id="picture-2"
id="picture-2"
在这里,我们将每一行视为一组"
-delimited 字段。通过在第二个字段末尾添加一个整数来修改它awk
。该整数每行增加一,但也除以二。结果是输出中的数字每第二行增加一(由于在 中的格式中使用数字时进行了舍入%d
)sprintf()
。
答案4
我会使用 for 循环。
假设:
- 您知道要创建的最大条目数。
- 前缀是不变的。
- 您的输出只是“前缀数字”。
#!/bin/sh
# Define constants
prefix="picture-"
max_count=30
# For/Next style loop
for i in ((i=1;i<=$max_count;i++))
do
echo "${prefix}${i}"
end