Замініть останнє входження тексту в рядок:
Цей розділ показує, як останнє входження шаблону пошуку в рядок може бути замінено за допомогою команди 'sed'.
Приклад-1: Замініть останнє входження слова на основі зразка
Наступна команда 'sed' буде шукати слово "PHP" у рядку та замініть пошукове слово на слово 'AngularJS' якщо слово існує в рядку.
$ echo "Java PHP Bash Python JavaScript PERL PHP Laravel" |sed 's / \ (.* \) PHP / \ 1AngularJS / '
Наступний результат з’явиться після запуску команди. Ось, слово "PHP" існує два рази у рядку, і останнє входження було замінено словом ' AngularJS'.
Приклад-2: Замініть останнє входження цифри на основі шаблону
Наступна команда 'sed' здійснить пошук будь-якої цифри у рядку та замінить останню цифру на число 9.
$ echo "Перше значення лічильника 2. Друге значення лічильника 4 "|sed 's / \ (.* \) [0-9]) * / \ 19 / '
Наступний результат з’явиться після запуску команди. Тут цифра з’являється два рази у рядку, і остання цифра, 4, було замінено на число 9.
Приклад-3: Замініть останню цифру числа на основі шаблону
Наступна команда 'sed' замінить останню цифру, яка існує у рядковому значенні, значенням подвійним нулем (0 0).
$ echo "Ціна товару становить 500 доларів."| sed 's / \ (.* \) [0-9] / \ 100 / 'Наступний результат з’явиться після запуску команди. Ось, 500 існує у рядковому значенні. Отже, згідно з командою заміни, останній нуль 500 було замінено двома подвійними нулями, а замінене значення - 5000.
Приклад-4: Замініть останнє входження слова іншим словом
Наступна команда 'sed' буде шукати слово 'Червень' у рядку та замініть останнє входження слова на значення, 'Може'.
$ printf "% s \ n" січень лютий червень квітень червень грудень | tr '\ n' "|sed 's / \ (.* \) Червень / \ 1 травня / '| tr "'\ n'
Наступний результат з’явиться після запуску команди. Ось, слово 'Червень' існує два рази в рядку, і останнє входження було замінено словом 'Може'.
Замінити останнє входження тексту у файл:
Створіть текстовий файл з іменем Продажі.txt із наступним вмістом для перевірки команди 'sed', яка використовується у цій частині підручника для заміни останнього входження тексту на основі шаблону.
Продажі.txt
Місяць Рік СумаСічень 2018 $ 200000
Березень 2019 $ 300000
Квітень 2019 $ 150000
Березень 2020 $ 350000
Травень 2019 $ 210000
Січень 2020 $ 240000
Приклад-5: Замініть останнє входження слова іншим словом
Наступна команда 'sed' буде шукати слово 'Січень'у файлі та замініть останнє входження цього слова на слово, 'Липень'.
$ Продаж котів.txt$ sed '$ s / січень / липень /' Продажі.txt
Наступний результат з'явиться після запуску команд. Слово 'Січень' з'являється два рази у файлі. Останнє, що існує в 7го рядок файлу замінено словом 'Липень'на виході.
Приклад-6: Замініть останнє входження числа іншим числом
"так" команда використовується для зворотного змісту файлу. "так" команда використовується з командою 'sed' у наступній команді, щоб замінити останнє входження '2019'зі словом, '2017'.
$ Продаж котів.txt$ tac Продажі.txt | sed '0, / 2019 / s / 2019/2017 /' | так
Наступний результат з’явиться після запуску команд. Тут значення року, '2019'з'являється тричі у файлі. Перший, "так" Команда змінила вміст файлу і надіслала вихідні дані в файл 'sed' команда для заміни першого входження '2019' що є останнім випадком у файлі за значенням року, '2017'. Після заміни вихідні дані були надіслані на "так" команда повернути результат назад знову. Таким чином, останній випадок2019 р'було замінено на значення, '2017 рік'.
Приклад-7: Замініть усі рядки на основі останнього входження слова
Наступне 'sed' команда замінить рядок текстом, розділеним табуляцією (\ t), де рядок починається з рядка 'Бер' востаннє у файлі.
$ Продаж котів.txt$ tac Продажі.txt | sed '0, / ^ берез.* / s / ^ берез.* / Липень \ t \ t2018 \ t $ 400000 / '| так
Наступний результат з'явиться після запуску команд. Два рядки у файлі починаються з рядка, 'Бер', і останнє входження цього рядка з'являється в 5го лінія. Перший "так" команда була використана для зворотного змісту файлу та надіслала вихідні дані до 'sed ' команди. 'sed'команда замінила рядок текстом,'Липень 2018 $ 400000'де рядок пошуку знайдений вперше. Вихідні дані 'сед'команда надіслана до "так" знову виконати команду, щоб змінити результат, який є основним вмістом файлу.
Висновок:
Команда 'sed' може бути використана для заміни будь-якої частини рядка або рядка файлу різними способами за допомогою шаблонів регулярних виразів. Цей підручник показав способи заміни останнього входження тексту пошуку у рядку або файлі за допомогою декількох команд 'sed'. Про те, як команду 'tac' можна використовувати з командою 'sed' для заміни останнього входження тексту пошуку, також показано в цьому посібнику. Але всі використані тут команди тимчасово генерують результат. Вам потрібно скористатися опцією '-i' з командою 'sed', щоб назавжди змінити вміст файлу на основі шаблону.