Команда sed используется в Linux для различных типов текстовых операций, таких как вставка, удаление, замена и т. д. Различные типы задач замены могут быть легко выполнены с помощью команды sed. Любая задача замены может быть выполнена на основе искомого текста или шаблона. Текст или шаблон для поиска могут встречаться несколько раз в строке или файле, в котором будет выполняться поиск. Как вы можете заменить последнее вхождение искомого текста или шаблона, было показано в этой статье.
В этом разделе показано, как можно заменить последнее вхождение шаблона поиска в строке с помощью команды sed.
Следующая команда sed будет искать слово ‘PHP’ в строке и заменять искомое слово словом ‘AngularJS’, если это слово существует в строке.
$ echo "Java PHP Bash Python JavaScript PERL PHP Laravel" | sed 's/\(.*\)PHP/\1AngularJS/'
Здесь слово «PHP» встречается в строке два раза, а последнее вхождение заменено словом «AngularJS».
Следующая команда sed будет искать любую цифру в строке и заменять последнюю цифру числом 9.
$ echo "Первое значение счетчика 2. Второе значение счетчика 6" | sed 's/\(.*\)[0-9])*/\19/'
Следующий вывод появится после запуска команды. Здесь цифра появляется в строке два раза, а последняя цифра 4 заменена цифрой 9.
Следующая команда sed заменит последнюю цифру, которая существует в строковом значении, значением с двойным нулем (0 0).
$ echo "Цена товара 1000." | sed 's/\(.*\)[0-9]/\100/'
Следующий вывод появится после запуска команды. Здесь 500 существует в строковом значении. Итак, согласно команде замены, последний ноль 500 был заменен двумя двойными нулями, и замененное значение равно 5000.
Следующая команда sed будет искать слово ‘Jun’ в строке и заменять последнее вхождение слова значением ‘May’.
$ printf "%s\n" Jan Feb Jun Apr Jun Dec | tr '\n' ' ' | sed 's/\(.*\)Jun/\1May/' | tr ' ' '\n'
Следующий вывод появится после запуска команды. Здесь слово «июнь» встречается в строке два раза, а последнее вхождение заменено словом «May».
Создайте текстовый файл с именем Sales.txt со следующим содержимым, чтобы протестировать команду sed, используемую в этой части статьи для замены последнего вхождения текста на основе шаблона.
Sales.txt
Месяц Год Сумма January 2018 200000 March 2019 300000 April 2019 150000 March 2020 350000 May 2019 210000 January 2020 240000
Следующая команда sed выполнит поиск слова “January” в файле и заменит последнее вхождение этого слова словом ‘July’.
$ cat Sales.txt $ sed '$ s/Январь/Июль/' Sales.txt
Следующий вывод появится после выполнения команд. Слово «January» встречается в файле два раза. Последнее вхождение, которое существует в 7- й строке файла, было заменено словом «July» в выводе.
Команда tac используется для изменения содержимого файла. Команда tac используется с командой sed в следующей команде, чтобы заменить последнее вхождение ‘2019 ‘ словом ‘2017’.
$ cat Sales.txt $ tac Sales.txt | sed '0,/2019/{s/2019/2017/}' | tac
Следующий вывод появится после выполнения команд. Здесь годовое значение «2019 » появляется в файле трижды. Первая команда tac изменила содержимое файла на противоположное и отправила вывод в команду sed, чтобы заменить первое вхождение ‘2019’, которое является последним вхождением в файле, значением года ‘2017’. После замены вывод был отправлен команде tac для повторного обращения вывода. Таким образом, последнее вхождение «2019» было заменено значением «2017».
Следующая команда sed заменит строку текстом с разделителями табуляции (\t), где строка начинается со строки ‘Mar’ в последний раз в файле.
$ cat Sales.txt $ tac Sales.txt | sed '0,/^Mar.*/{s/^Mar.*/July\t\t2018\t$ 400000/}' | tac
Следующий вывод появится после выполнения команд. Две строки в файле начинаются со строки «Mar», и последнее вхождение этой строки появляется в 5- й строке. Первая команда tac использовалась для обратного преобразования содержимого файла и отправки вывода команде sed. Команда sed заменила строку с текстом, «Jully 2018 400000», где строка поиска найдено в первый раз. Выход в команде SED отправлен в tac команду еще раз , чтобы полностью изменить вывод , что основное содержание файла.
Команда sed может использоваться для замены любой части строки или строки файла различными способами, используя шаблоны регулярных выражений. В этой статье показаны способы замены последнего вхождения искомого текста в строке или файле с помощью нескольких команд sed. В этой статье также было показано, как команду tac можно использовать с командой sed для замены последнего вхождения искомого текста. Но все используемые здесь команды будут временно генерировать вывод. Вы должны использовать опцию ‘-i’ с командой sed для постоянного изменения содержимого файла в зависимости от шаблона.