sed -i -e '/Leonardo/ s/$/ Narnie/' database_readers.txt
Здесь используется параметр редактирования на месте sed
( -i
), чтобы найти все строки, соответствующие регулярному выражению Леонардо
, и заменить привязку конца строки ( $
) одним пробелом и словом Narnie
. Это фактически добавляет Нарни
в конец совпадающих строк.
Будьте осторожны с шаблоном поиска по регулярному выражению - легко найти больше строк, чем вы ожидали. Сначала проверьте:
sed -n -e '/Leonardo/ s/$/ Narnie/p' database_readers.txt
Параметр -n
в сочетании с p
в конце s ///
делает sed
распечатайте ТОЛЬКО те строки, которые были изменены. НЕ используйте это с sed -i
, если вы не хотите удалить ВСЕ неизмененные строки из вашего файла.
В любом случае, если это распечатает больше строк, чем вы ожидали, измените Леонардо
на Леонардо Да Винчи
или ^ 753 [[: space:]] \ +
(предполагая, что число в начале строки является уникальным идентификатором), и попробуйте еще раз, пока не изменится только строка (строки), которые вы ожидали.
Для чего-то более сложного, вы можете изучить использование sqlite
(или даже mysql
или postgresql
) вместо простого текстового файла. Или используйте такой язык, как perl
, который имеет множество библиотечных модулей для управления базами данных с плоскими файлами.