Мне нужно преобразовать цифры в их имя, например: 1 = одна 2 = две и т. Д., Но я могу использовать только команду SED . Должны измениться только однозначные числа.

sed 's/[1]/one/g; s/[2]/two/g; s/[3]/three/g; s/[4]/four/g; s/[5]/five/g; s/[6]/six/g; s/[7]/seven/g; s/[8]/eight/g; s/[9]/nine/g; s/[0]/zero/g'

Текст:

Lo5se глаза толстеют шоу. Win4ter действительно может противостоять изменениям букв в настоящее время. Таким образом, улучшенная моя очарованная картина выставила адаптированные требования. Получено было произведено подготовленное погружение строго от человека, заброшенного. Известные 72ые деньги 6с таким большим распадом голоса т6 здесь. Сохранено быть сердечно несерьезным. Он 3doors qui03ck ребенок точка в. Sh2a9re разозлился спереди хотя бы стилем его.

Результат должен быть:

Ло пять самих глаз толстеют. Выигрыш четыре тер действительно может поменять путь изменения пять сейчас. Так что шесть бродят по моей очарованной картине, приспосабливаются к пяти требованиям. Получено было четыре продукта четыре , подготовленное погружение пять , строго оторванное от мужчины. Известные 72-ые деньги шесть настолько велики, что таящий голос шесть здесь. Сохранено быть сердечно несерьезным. Он три двери успокаивает ребенка. Если бы он был недоволен тем, что ему не нравилось.

-1
Péter Attila 11 Апр 2019 в 21:28

2 ответа

Лучший ответ

С помощью sed, который имеет -E для включения ERE и распознает \n как означающий символ новой строки (например, GNU sed):

sed -E 's/(^|[^0-9])([0-9])([^0-9]|$)/\1\n\2\n\3/g; s/\n1\n/one/g; s/\n2\n/two/g; s/\n3\n/three/g; s/\n4\n/four/g; s/\n5\n/five/g; s/\n6\n/six/g; s/\n7\n/seven/g; s/\n8\n/eight/g; s/\n9\n/nine/g; s/\n0\n/zero/g' file
Lofivese eyes get fat shew. Winfourter can indeed letter oppose way change tefivended now. So is impsixrove my charmed picture exposed adaptfiveed demands. Received had enfourd prodfouruced prepared divefiverted strictly off man br55anched. Known 72ye money sixso large decay voice tsixhere to. Preserved be mr cordially incommode as an. He threedoors qui03ck child an point at. Had shtwoa9re vexed front least style off why him.
1
Ed Morton 11 Апр 2019 в 20:02

Это может сработать для вас (GNU sed):

sed -E 's/[0-9]+/\n&/g;s/\n(.[0-9])/\1/g;s/$/\n1one2two3three4four5five6six7seven8eight9nine0zero/;:a;s/\n(.)(.*\n.*\1([^0-9]+))/\3\2/;ta;P;d' file

Добавить новую строку к каждой группе номеров.

Удалите добавленную новую строку для чисел, состоящих более чем из двух цифр.

Добавьте новую строку и таблицу поиска в конец строки.

Используйте цикл и сопоставление с образцом, чтобы заменить каждую отдельную цифру ее литералом, обеспечивая сохранение таблицы поиска.

Выведите исправленную текущую строку за вычетом таблицы поиска.

0
potong 11 Апр 2019 в 22:18