sed在第N次出现后附加文本

时间:2017-03-15 12:31:02

标签: bash sed gnu-sed

我有以下脚本的模板,我需要为每个案例插入不同的PARAM值。

case $1 in
1)
    export PARAM=
    ;;
2)
    export PARAM=
    ;;
3)
    export PARAM=
    ;;
esac

我刚刚找到了如何为第一个案例PARAM插入值的示例:

sed -i '/export PARAM=/{s//export PARAM=1212212121/;:a;n;ba}' file

但是如何处理案例2和3?

2 个答案:

答案 0 :(得分:0)

使用awk

awk -v v="1212212121" -v n=2 '/Param/{c++} c==n-1{$(NF)+=" "v}1' file
awk -v v="1212212333" -v n=3 '/Param/{c++} c==n-1{$(NF)+=" "v}1' file

依旧......

说明:

    每次找到模式/Param/{c++}时,
  • c会递增一个计数器/Param/
  • c==n-1检查c是否具有所需的值,并添加值
  • 1始终 true awk将打印所有行。
  • -v v="1212212121" -v n=2将变量vn传递给脚本。

答案 1 :(得分:0)

这可能适合你(GNU sed):

n=2 v=11212212121
sed -ri '/export PARAM=/{x;s/^/x/;/x{'$n'}/!{x;b};x;s/(export PARAM=).*/\1'$v'/;:a;n;ba}' file

将计数器保留在保留空间中,如果计数器符合您的预期,请替换然后打印出文件的其余部分。