sed добавить текст после N-го вхождения
У меня есть шаблон следующего скрипта, и мне нужно вставить разные PARAM
значение для каждого случая.
case $1 in
1)
export PARAM=
;;
2)
export PARAM=
;;
3)
export PARAM=
;;
esac
Я просто нашел пример, как вставить значение для 1-го случая PARAM
:
sed -i '/export PARAM=/{s//export PARAM=1212212121/;:a;n;ba}' file
но как я могу сделать это для случаев 2 и 3?
2 ответа
Решение
Это может работать для вас (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
Держите счетчик в поле удержания, и, если счетчик соответствует вашему ожиданию, замените, а затем распечатайте оставшуюся часть файла.
Использование 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
всегда верно.awk
напечатает все строки.-v v="1212212121" -v n=2
передает переменныеv
а такжеn
к сценарию.