sledopit, да sed вообще имеет много разных конструкций, я просто пользуюсь наиболее общими, которые могу применить почти везде (sed/awk/vim/perl...) Непосредственно в изучение sed я ни когда не углублялся.
Пока Вам разжёвывал всё, решил как красивей записать команду на awk. Пример для GNU AWK: gawk '/city/{gsub(/$/," defalt");}{print;}' /path/to/your/file
Честно, если Вам это интересно и не один раз пригодится, то советую изучить sed. Вот тут есть много полезных ссылок в шапке и в этой теме всегда помогут.
А пока: Оператор s, говорит о том, что далее пойдёт замена одного выражения на другое. То, что заключено между первых двух слэшей это то, что мы будем менять, а то, что во вторых — на что. Выражение .* означает любое совпадение, заключение в скобки говорит sed сохранить это дело в переменную (всего таких переменных может быть 9 и они заполняются по очереди), скобки экранированы, т.к. иначе это будет считаться обычным строчным символом, а не оператором sed. Соответственно то НА ЧТО мы меняем это всё что было (тут раскрывается \1) + default. После последнего слэша могут идти различные модификаторы для команды `s`.
sed, конечно, могуч, но я больше awk люблю.
Хотя в данной ситуации на awk как-то ни чего красивее чем awk '{print $0 ~ /city/? $0" default":$0;}' /path/to/your/file я не придумал.