我想在每隔 82 行间隔后将第一个字符替换C
为H
23 行(例如第 83 行到 106 行)。我该如何使用sed
or来做到这一点awk
?
答案1
生成示例文件
lines_per_set=82
sets=3
lines=$(( $lines_per_set * $sets ))
yes CC | head -n "$lines" | nl > file
初始化两个计数器并对它们进行减计数。外部计数器复位触发重新初始化。
awk '
!k {j= 24; k= 82}
j && j-- {sub(/C/,"H")}
k--
' file
与上面 GNU sed 中的想法相同,其中计数器保存在保留空间中。
sed -En '
G
/^[^\n]*\n{1,24}$/s/C/H/
P
/\n{82}/{z;x;d;}
z;H
' file