Логотип

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

Как заменить все после шаблона с помощью команды `sed`

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

 

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

В этом разделе показано, как можно заменить последнее вхождение шаблона поиска в строке с помощью команды sed.

 

Пример 1: Заменить последнее вхождение слова по шаблону

Следующая команда sed будет искать слово ‘PHP’ в строке и заменять искомое слово словом ‘AngularJS’, если это слово существует в строке.

$ echo "Java PHP Bash Python JavaScript PERL PHP Laravel" |
sed 's/\(.*\)PHP/\1AngularJS/'

 

Читать  Что означает $_ в Bash

Здесь слово «PHP» встречается в строке два раза, а последнее вхождение заменено словом «AngularJS».

 

Пример 2: Заменить последнее вхождение шаблона на основе цифр

Следующая команда sed будет искать любую цифру в строке и заменять последнюю цифру числом 9.

$ echo "Первое значение счетчика 2. Второе значение счетчика 6" |
sed 's/\(.*\)[0-9])*/\19/'

 

Следующий вывод появится после запуска команды. Здесь цифра появляется в строке два раза, а последняя цифра 4 заменена цифрой 9.

 

Пример 3: замена последней цифры числа по шаблону

Следующая команда sed заменит последнюю цифру, которая существует в строковом значении, значением с двойным нулем (0 0).

$ echo "Цена товара 1000." | sed 's/\(.*\)[0-9]/\100/'

 

Следующий вывод появится после запуска команды. Здесь 500 существует в строковом значении. Итак, согласно команде замены, последний ноль 500 был заменен двумя двойными нулями, и замененное значение равно 5000.

 

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

Следующая команда sed будет искать слово ‘Jun’ в строке и заменять последнее вхождение слова значением ‘May’.

$ printf "%s\n" Jan Feb Jun Apr Jun Dec | tr '\n' ' ' |
sed 's/\(.*\)Jun/\1May/' | tr ' ' '\n'

 

Следующий вывод появится после запуска команды. Здесь слово «июнь» встречается в строке два раза, а последнее вхождение заменено словом «May».

 

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

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

Читать  Bash. Циклы в Bash

Sales.txt

Месяц Год Сумма
January     2018    200000
March           2019    300000
April           2019    150000
March           2020    350000
May         2019    210000
January     2020    240000

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

Следующая команда sed выполнит поиск слова «January»  в файле и заменит последнее вхождение этого слова словом ‘July’.

$ cat Sales.txt
$ sed '$ s/Январь/Июль/' Sales.txt

 

Следующий вывод появится после выполнения команд. Слово «January» встречается в файле два раза. Последнее вхождение, которое существует в 7- й строке файла, было заменено словом «July» в выводе.

 

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

Команда 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».

Читать  Как скопировать ключи SSH

 

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

Следующая команда 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 для постоянного изменения содержимого файла в зависимости от шаблона.

Редактор: AndreyEx

Рейтинг: 4.4 (32 голоса)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала