sed: добавить текст в конец совпадения

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

sed: добавить текст в конец совпадения

Сообщение savigm »

Собственно нужно добавить текст в конец каждого совпадения, т.е. допустим в файле есть символы "\n", а мне надо прилепить к ним еще "\r".
Средствами замены это делается так:

Код: Выделить всё

sed 's/\\n/\\n\\r/g'


А есть ли средство добавления, а не замены?
a\ - не подходит, т.к. добавляет текст на следующую строку после совпадения.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: sed: добавить текст в конец совпадения

Сообщение /dev/random »

sed 's/жуткое регулярное выражение/добавляемый в начало текст&добавляемый в конец текст/'
- не?
Спасибо сказали:
Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

Re: sed: добавить текст в конец совпадения

Сообщение savigm »

/dev/random писал(а):
21.10.2009 19:52
sed 's/жуткое регулярное выражение/добавляемый в начало текст&добавляемый в конец текст/'
- не?

Да, именно то, спасибо.
Час искал по инету, man смотрел, что-то про волшебный '$' нигде инфы не было.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: sed: добавить текст в конец совпадения

Сообщение /dev/random »

savigm писал(а):
21.10.2009 19:55
про волшебный '$'

&
Спасибо сказали:
Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

Re: sed: добавить текст в конец совпадения

Сообщение savigm »

/dev/random писал(а):
21.10.2009 19:56
savigm писал(а):
21.10.2009 19:55
про волшебный '$'

&

Опечатка, конечно "&", видимо знак доллара более привлекателен вниманию.
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: sed: добавить текст в конец совпадения

Сообщение McLeod095 »

А так не подойдет
sed -e 's/\(regexp\)/\1add_text/'
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: sed: добавить текст в конец совпадения

Сообщение eddy »

savigm писал(а):
21.10.2009 19:48

Код: Выделить всё

sed 's/\\n/\\n\\r/g'

[offtop]Кстати, это делает unix2dos :)[offtop]
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed: добавить текст в конец совпадения

Сообщение drBatty »

eddy писал(а):
22.10.2009 11:01
Кстати, это делает unix2dos

не, оно не то делает, оно заменяет <LF> на <CR><LF>, а тут к двум символам добавляются ещё 2:

Код: Выделить всё

'/', 'n' -> '/', 'n', '/', 'r'

McLeod095 писал(а):
22.10.2009 10:51
А так не подойдет
sed -e 's/\(regexp\)/\1add_text/'

вот это и есть: "добавление к строке", как и требовалось изначально.

savigm писал(а):
21.10.2009 19:58
Опечатка, конечно "&", видимо знак доллара более привлекателен вниманию.

s/$/то_что_добавляется/
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: sed: добавить текст в конец совпадения

Сообщение t.t »

drBatty писал(а):
05.03.2010 19:18
McLeod095 писал(а):
22.10.2009 10:51
А так не подойдет
sed -e 's/\(regexp\)/\1add_text/'

вот это и есть: "добавление к строке", как и требовалось изначально.
А выше разве не то же самое?
/dev/random писал(а):
21.10.2009 19:52
sed 's/жуткое регулярное выражение/добавляемый в начало текст&добавляемый в конец текст/'


drBatty писал(а):
05.03.2010 19:18
savigm писал(а):
21.10.2009 19:58
Опечатка, конечно "&", видимо знак доллара более привлекателен вниманию.
s/$/то_что_добавляется/
Это уже не совсем по теме: добавление в конец каждой строки, а не после нужного текста.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed: добавить текст в конец совпадения

Сообщение drBatty »

t.t писал(а):
07.03.2010 10:56
А выше разве не то же самое?

да.
выражения
/(X)/
/X/
эквивалентны. и подменяют &, \0, а первое ещё и \1
(как мы уже выяснили, \0 хоть и не стандартно, но работает)

Код: Выделить всё

s/$/то_что_добавляется/

t.t писал(а):
07.03.2010 10:56
Это уже не совсем по теме: добавление в конец каждой строки, а не после нужного текста.



savigm писал(а):
21.10.2009 19:48
А есть ли средство добавления, а не замены?

а мне кажется, что как раз по теме: это средство добавления, а не замены. Хотя, конечно можно и это считать заменой позиции конца строки.

Что касается "для всех строк", то это распространяется на все вышеприведённые примеры. Есть адрес, при необходимости.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: