LINUX.ORG.RU

sed замена только abc но не abcde

 


1

1

Привет всем.

Подскажите конструкцию для замены только конкретного вхождения.
Чтобы модифицировалось ab, но не abсd, dabc.
Пример:
ab123 > ab 123 - только такое
abc123 > abc123
dab123 > dab123

Как заменять ТОЛЬКО точное вхождение?

Пробовал с отрицанием:
’/abc/!s/ab/ab /g - работает, но как остальные «НЕ» добавить?

★★★★★

Последнее исправление: S_Paul (всего исправлений: 1)

Ответ на: комментарий от futurama

Ещё один циркумфлекс помог:
sed -r ‘s/^ab([[:alpha:]])/ab \1/g’
Ну и если строки будут вида «aa [d]ab[c]123», то уже не работает.

S_Paul ★★★★★
() автор топика
Последнее исправление: S_Paul (всего исправлений: 1)
Ответ на: комментарий от S_Paul

определи границу слева и справа от «аб» и получишь результат

futurama ★★★★★
()
Ответ на: комментарий от S_Paul

Если аб не вначале строки или могут быть спецсимволы, а замена должна быть только полной части, когда вокруг только цифры, то

echo -e '900abс123\na^bab1c123\nabab000' | sed -r 's/([0-9])*ab([0-9])/\1ab \2/g'
900abс123
a^bab 1c123
abab 000

@futurama правильно тебе пишет, нужно понимать, какой «разделитель» использовать.

Entmatix
()

left side ^|\s+|[^[:alpha:]]

right side $|\s+|[^[:alpha:]]

example

sed 's/(^|\s+|[^[:alpha:]])(ab)($|\s+|[^[:alpha:]])/\1\2 \3/'

futurama ★★★★★
()
Ответ на: комментарий от S_Paul

если еще чутка подумать, то так

sed -r 's/\b(ab)([^[:alpha:]])/\1 \2/g'
futurama ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.