substitution grouping

Если нужно производить так называемые групповые замены - каждую группу нужно заключить в круглые скобки () скобки нужно экранировать поэтому получится \(\)

Рассмотрим файл sites.txt

less sites.txt

AndreyOlegovich.ru IT
Авиасейлз, Travel
Booking.com ,Hotels
Hotellook, Hotels
TopBicycle.ru, Bicycles

Переведём названия сайтов в верхний регистр

sed 's/\([^,]*\)/\U\1/' sites.txt

ANDREYOLEGOVICH.RU, IT
АВИАСЕЙЛЗ, Travel
BOOKING.COM, Hotels
HOTELLOOK, Hotels
TOPBICYCLE.RU, Bicycles

Разберём подробно:

Внутри \(\) первая группа над которой проводится действие (замена)

\([^,]*\)

[^,]* означает неограниченное количество не запятых

Как только встретится первая запятая группа сформируется, если запятой в строке не будет выделится вся строка.

\U означает перевести в верхний регистр

&92;1 означает сделать это с первой группой. У нас пока что всего одна группа.

Чтобы работать со второй группой - нужно после первой поставить , \(\)

Групп может быть много. Синтаксис следующий:

\(\), \(\), \(\), \(\)

Они все должны быть в левой части выражения

/\(\), \(\), \(\), \(\) / /

sed 's/\([^,]*\),\([^,]*\)/\U\1\L\2/' sites.txt

ANDREYOLEGOVICH.RU it
АВИАСЕЙЛЗ travel
BOOKING.COM hotels
HOTELLOOK hotels
TOPBICYCLE.RU bicycles

Чтобы запятая не пропадала нужно добавить её между U и L

sed 's/\([^,]*\),\([^,]*\)/\U\1,\L\2/' sites.txt

ANDREYOLEGOVICH.RU, it
АВИАСЕЙЛЗ, travel
BOOKING.COM, hotels
HOTELLOOK, hotels
TOPBICYCLE.RU, bicycles

Что произошло: все до первой запятой было переведенов верхний регистр, затем sed начал искать вторую запятую для второй группы, не нашёл и перевёл в нижний регистр всю оставшуюся строку.

Рассмотрим файл mod_sites.txt

AndreyOlegovich.ru, IT, abc, DEF
Авиасейлз, Travel, ABC, def
Booking.com, Hotels, abc, def
Hotellook, Hotels, ABC, DEF
TopBicycle.ru, Bicycles,,

Применим к нему тот же самый скрипт

sed 's/\([^,]*\),\([^,]*\)/\U\1,\L\2/' mod_sites.txt

ANDREYOLEGOVICH.RU, it, abc, DEF
АВИАСЕЙЛЗ, travel, ABC, def
BOOKING.COM, hotels, abc, def
HOTELLOOK, hotels, ABC, DEF
TOPBICYCLE.RU, bicycles,,

Как вы можете убедиться, после второй запятой регистр не изменился.

Чтобы его поменять нужна уже третья группа

sed 's/\([^,]*\),\([^,]*\),\([^,]*\)/\U\1,\L\2,\L\3/' mod_sites.txt

ANDREYOLEGOVICH.RU, it, abc, DEF
АВИАСЕЙЛЗ, travel, abc, def
BOOKING.COM, hotels, abc, def
HOTELLOOK, hotels, abc, DEF
TOPBICYCLE.RU, bicycles,,

Теперь между второй и третьей запятыми везде нижний регистр.

Немного более сложный вариант. Этот скрипт добавит запятую перед последними тремя цифрами в числе

s/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g

Надеюсь статья была для вас полезной. Если что-то непонятно - спрашивайте в комментариях, а если они отключены, то в телеграм.

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: