sed

Как заменить последнее вхождение с помощью sed

Как заменить последнее вхождение с помощью sed
Команда sed используется в Linux для различных типов текстовых операций, таких как вставка, удаление, замена и т. д. Различные типы задач по замене могут быть легко выполнены с помощью команды sed. Любая задача замены может быть выполнена на основе искомого текста или шаблона. Текст или шаблон для поиска может встречаться несколько раз в строке или файле, где будет выполняться поиск. В этом руководстве показано, как заменить последнее вхождение искомого текста или шаблона.

Заменить последнее вхождение текста в строку:

В этом разделе показано, как можно заменить последнее вхождение шаблона поиска в строке с помощью команды 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'

Следующий вывод появится после запуска команды. Здесь слово 'Июнь' существует два раза в строке, и последнее вхождение было заменено словом 'Может'.

Заменить последнее вхождение текста в файл:

Создайте текстовый файл с именем Продажи.текст со следующим содержимым для тестирования команды sed, используемой в этой части руководства для замены последнего вхождения текста на основе шаблона.

Продажи.текст

Месяц Год Сумма
Январь 2018 $ 200000
Март 2019 $ 300000
Апрель 2019 $ 150000
Март 2020 $ 350000
Май 2019 $ 210000
Январь 2020 $ 240000

Пример-5: заменить последнее вхождение слова другим словом

Следующая команда sed будет искать слово Январь'в файле и замените последнее вхождение этого слова словом, 'Июль'.

$ cat Продажи.текст
$ sed '$ s / Январь / Июль /' Продажи.текст

Следующий вывод появится после выполнения команд. Слово 'Январь' появляется два раза в файле. Последнее вхождение, которое существует в 7th строка файла заменена словом 'Июль'на выходе.

Пример-6: заменить последнее вхождение числа другим числом

'tac' команда используется для изменения содержимого файла. 'tac' используется с командой sed в следующей команде для замены последнего вхождения '2019'со словом, '2017'.

$ cat Продажи.текст
$ tac Продажи.txt | sed '0, / 2019 / s / 2019/2017 /' | такс

Следующий вывод появится после выполнения команд. Здесь значение года, '2019'появляется в файле трижды. Первое, 'tac' команда перевернула содержимое файла и отправила вывод в 'sed' команда для замены первого вхождения '2019' который является последним вхождением в файл по значению года, '2017'. После замены вывод отправлен в 'tac' команда, чтобы снова перевернуть вывод. Таким образом, последнее появление '2019 г'заменено значением, 2017 г'.

Пример-7: Заменить все в строке на основе последнего вхождения слова

Следующие 'sed' команда заменит строку текстом с разделителями табуляции (\ t), где строка начинается со строки 'Мар' в последний раз в файле.

$ cat Продажи.текст
$ tac Продажи.txt | sed '0, / ^ мар.* / s / ^ мар.* / Июль \ t \ t2018 \ t $ 400000 / '| такс

Следующий вывод появится после выполнения команд. Две строки в файле начинаются со строки, 'Мар', и последнее вхождение этой строки появляется в 5th линия. Первое 'tac' была использована команда для изменения содержимого файла и отправки вывода в 'sed ' команда. 'sed'команда заменила строку текстом,'Июль 2018 г'где строка поиска найдена впервые. Выход сед'команда отправлена 'tac' команда снова, чтобы отменить вывод, который является основным содержимым файла.

Заключение:

Команда 'sed' может использоваться для замены любой части строки или строки файла различными способами с использованием шаблонов регулярных выражений. В этом руководстве показаны способы замены последнего вхождения искомого текста в строке или файле с помощью нескольких команд sed. Как команду 'tac' можно использовать с командой 'sed' для замены последнего вхождения искомого текста, также было показано в этом руководстве. Но все используемые здесь команды будут временно генерировать вывод. Вы должны использовать опцию '-i' с командой 'sed', чтобы навсегда изменить содержимое файла на основе шаблона.

Как изменить левую и правую кнопки мыши на ПК с Windows 10
Совершенно нормально, что все устройства компьютерной мыши эргономичны для правшей. Но есть мышиные устройства, специально разработанные для левшей ил...
Эмуляция щелчков мыши с помощью мыши без щелчка в Windows 10
Использование мыши или клавиатуры в неправильной позе или чрезмерное использование может привести к множеству проблем со здоровьем, включая растяжение...
Добавьте жесты мыши в Windows 10 с помощью этих бесплатных инструментов
В последние годы компьютеры и операционные системы сильно эволюционировали. Было время, когда пользователям приходилось использовать команды для навиг...