Другой подход с sed
состоит в том, чтобы привязать замену к цифрам в конце строки с помощью:
sed '/^jack,/s/[0-9][0-9]*$/12/' file
При этом используется форма sed '/find/s/match/replace'
, где find
находится в начале строка '^'
слово "jack,"
устраняет всю двусмысленность, например, jackson,33
. Затем нормальная замена форма 's/match/replace/'
, где match
находит хотя бы один ди git в конце строки (привязанный '$'
) и заменяет его на 12
(или что бы вы ни выбрали).
Пример использования / Вывод
С вашим файлом примера в file
вы получите:
$ sed '/^jack,/s/[0-9][0-9]*$/12/' file
student,marks
jack,12
peter,20
rick,10
( примечание: класс символов POSIX [[:digit:]]
эквивалентен [0-9]
, что является другой альтернативой)
Эквивалентное выражение с использованием класса символов POSIX будет:
sed '/^jack,/s/[[:digit:]][[:digit:]]*$/12/' file
Вы также можете использовать Расширенное регулярное выражение , которое предоставляет оператор повторения '+'
для указания один или несколько по сравнению с базовым c указателем повторения '*'
указать ноль или более . Эквивалентный ERE будет sed -E '/^jack,/s/[0-9]+$/12/' file
. Вы можете добавить опцию -i
для редактирования на месте и / или использовать ее как -i.bak
, чтобы создать резервную копию оригинала с расширением .bak
перед изменение оригинала.