Если вы действительно должны использовать sed
, то возможным алгоритмом будет добавление пробелов перед строкой math
, пока их 18 или меньше предшествующих символов:
$ sed -e :a -e 's/\(^.\{,18\}\)math/\1 math/; ta' file
how are you math123
good math234
try this math500
Если вы хотите переместить только последнее вхождение строки, вы можете привязать его к концу строки. Например, если задано что-то вроде
$ cat file
how are you math123
good math234
try this math500
math101 is enough math
, тогда при условии отсутствия завершающего пробела
$ sed -e :a -e 's/^\(.\{,18\}\)\(math[^[:space:]]*\)$/\1 \2/; ta' file
how are you math123
good math234
try this math500
math101 is enough math
Если ваш sed
имеет расширенный режим регулярного выражения, вы можете упростить до
sed -E -e :a -e 's/^(.{,18})(math[^[:space:]]*)$/\1 \2/; ta'
Я бы оставил файл истории в покое и вместо этого реализовал вашу запись команд в обработчике prompt_command. Я бы также сделал запись в личный файл журнала, тогда у вас не будет конфликтов с другим использованием файла истории или проблем с доступом других пользователей / root