Под добавлением вы подразумеваете добавление в конец строки после строки с соответствием?Если так, то хитрость заключается в том, чтобы заставить sed
повторно сканировать шаблон, иначе он пропустит строку после той, где добавлен SampleInsert.Вам нужно использовать метку и перейти к командам метки:
$ cat configfile.txt
1 gary tty7
2 mysearchstringgary tty7
3 testingmysearchstring gary tty7
4 gary tty7mysearchstring
5
6 gary tty7mysearchstring
7 gary tty7
8 gary tty7
$
$
$ sed -r -e ':a;/mysearchstring/ {n;s/$/SampleInsert/};ta' configfile.txt
1 gary tty7
2 mysearchstringgary tty7
3 testingmysearchstring gary tty7SampleInsert
4 gary tty7mysearchstringSampleInsert
5 SampleInsert
6 gary tty7mysearchstring
7 gary tty7SampleInsert
8 gary tty7
$
Так как вы не предоставили тестовые данные, я просто придумал текст поиска в разных местах.Не забудьте пустую строку для тестирования.
Команда sed
использует аргументы -r -e для расширенных регулярных выражений.Внутри одинарных кавычек находятся несколько команд, разделенных точками с запятой.Сначала установите метку с именем a, затем найдите строки, соответствующие «mysearchstring».Если найдено, запустите команды, окруженные фигурными скобками и разделенные точками с запятой.n означает чтение следующей строки в буфере шаблонов, так как это строка, к которой вы хотите добавить текст.Найдите конец строки и добавьте «SampleInsert».Теперь эта строка может содержать текст для поиска, поэтому ее также необходимо искать.Вот почему следующая команда - это та, что означает перейти к метке a.Метка a находится непосредственно перед поиском поисковой строки, поэтому повторная проверка текущей строки для поискового шаблона приводит к появлению.
EDIT: если используется внутри скрипта bash, где значения для поиска и вставки являются переменными, определенными всценарий:
#!/bin/bash
readonly searchstr='mysearchstring'
readonly insertstr='SampleInsert'
sed -r -e ":a;/${searchstr}/ {n;s/$/${insertstr}/};ta" configfile.txt
Или переданный в аргументе сценарию (должен быть обработан некоторые ошибки, но это только для иллюстрации):
$ fixfile.sh mysearchstr SampleInput
#!/bin/bash
readonly searchstr=$1
readonly insertstr=$2
sed -r -e ":a;/${searchstr}/ {n;s/$/${insertstr}/};ta" configfile.txt