sed 在第 N 次出现后追加文本
sed append text after N-th occurrence
我有以下脚本的模板,我需要为每个案例插入不同的 PARAM
值。
case 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 我该如何做呢?
使用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++}
每次找到模式 /Param/
时都会增加一个计数器 c
。
c==n-1
检查 c
是否具有所需的值并将该值添加到
1
总是 true。 awk
将打印所有行。
-v v="1212212121" -v n=2
将变量 v
和 n
传递给脚本。
这可能对你有用 (GNU sed):
n=2 v=11212212121
sed -ri '/export PARAM=/{x;s/^/x/;/x{'$n'}/!{x;b};x;s/(export PARAM=).*/'$v'/;:a;n;ba}' file
保留一个计数器space,如果计数器符合您的预期,替换并打印出文件的其余部分。
我有以下脚本的模板,我需要为每个案例插入不同的 PARAM
值。
case 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 我该如何做呢?
使用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++}
每次找到模式/Param/
时都会增加一个计数器c
。c==n-1
检查c
是否具有所需的值并将该值添加到1
总是 true。awk
将打印所有行。-v v="1212212121" -v n=2
将变量v
和n
传递给脚本。
这可能对你有用 (GNU sed):
n=2 v=11212212121
sed -ri '/export PARAM=/{x;s/^/x/;/x{'$n'}/!{x;b};x;s/(export PARAM=).*/'$v'/;:a;n;ba}' file
保留一个计数器space,如果计数器符合您的预期,替换并打印出文件的其余部分。