如何用BASH/SED匹配指定行并将其重复指定次数?
解决方法
使用 awk 实现(推荐)
这是最简洁优雅的处理方式,直接通过 awk 完成文件内容的修改:
# 设置需要重复的次数 repeatnum=2 # 处理文件,将包含repeatline的行重复 repeatnum+1 次(原行+repeatnum次复制) awk -v n="$repeatnum" '/repeatline/{for(i=0;i<=n;i++) print; next}1' template.inp > new_template.inp
命令细节:
-v n="$repeatnum":将 shell 中的repeatnum变量传递给 awk 内部使用/repeatline/:匹配所有包含repeatline字符串的行for(i=0;i<=n;i++) print:把匹配到的行打印n+1次,对应原行加上repeatnum次重复内容next:跳过当前行的后续处理逻辑,避免重复输出1:awk 的简写语法,代表对未匹配的行执行默认操作(原样打印)
使用 sed 实现
如果更习惯用 sed,可以结合 shell 命令生成重复内容后替换原行:
repeatnum=2 # 提取目标行内容 target_line=$(grep "repeatline" template.inp) # 生成重复的行文本 repeated_lines=$(printf "%s\n" "$target_line" | head -n $repeatnum) # 替换原行为原行+重复内容 sed "/repeatline/c\\$target_line\n$repeated_lines" template.inp > new_template.inp
说明:
grep提取出包含repeatline的目标行printf配合head生成repeatnum次重复的行内容sed的c命令将原行替换为原行加上重复内容
内容的提问来源于stack exchange,提问作者EJSABOLK
相关产品推荐
相关产品推荐

