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 к сценарию.
Другие вопросы по тегам