РЕДАКТИРОВАТЬ : Я не знаю заранее, в какой «колонке» будут мои цифры, и я хотел бы иметь одну строку. Очевидно, что sed не выполняет арифметику, так что, может быть, решение с одной строкой, основанное на awk?
У меня есть строка: (обратите внимание на интервал)
eh oh 37
и я хочу, чтобы оно стало:
eh oh 36
(поэтому я хочу сохранить интервал)
Использование awk Я не знаю, как это сделать, пока у меня есть:
echo "eh oh 37" | awk '$3>=0&&$3<=99 {$3--} {print}'
Но это дает:
eh oh 36
(пробельные символы были потеряны, поскольку разделитель полей равен '')
Есть ли способ задать awk что-то вроде "напечатать вывод, используя точно такие же разделители полей, как у ввода" ?
Затем я попробовал еще кое-что, используя awk sub (.., ..) метод:
' sub(/[0-9][0-9]/, ...) {print}'
но пока нет сигары: я не знаю, как ссылаться на регулярное выражение и делать арифметику с ним во втором аргументе (который я оставил с '...' на данный момент).
Потом я попробовал с sed, но застрял после этого:
echo "eh oh 37" | sed -e 's/\([0-9][0-9]\)/.../'
Могу ли я сделать арифметику из sed , используя ссылку на совпадающие цифры, и чтобы выходные данные не изменяли количество пробелов?
Обратите внимание, что это связано с моим вопросом о Emacs и о том, как применить его к некоторому (большому) региону Emacs (используя область замены с command-on-region команды Emacs *, но это не то же самое) вопрос: этот вопрос конкретно о том, как "сохранить пробелы" при работе с awk / sed / etc.