URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7593
[ Назад ]

Исходное сообщение
"как заменить часть строки в awk?"

Отправлено new_user721 , 18-Сен-08 06:25 
Из
some_text KEY_WORD2 some_text     )
получить:
some_text 'KEY_WORD2 some_text' )
вобшем заключить в кавычки KEY_WORD2 и все что следует за етим до скобки
thanks

Содержание

Сообщения в этом обсуждении
"заменить часть строки в awk"
Отправлено Andrey Mitrofanov , 18-Сен-08 08:50 
>вобшем заключить в кавычки KEY_WORD2 и все что следует за етим до

В GNU awk есть gensub c \1\2\3 :

#!/usr/bin/gawk -f

BEGIN {
str="some_text KEY_WORD2 some_text     )"
print str
str=gensub("^\(some_text \+\)([^ )][^)]+[^ )])( *\\))","\\1'\\2'\\3",1,str)
print str
exit
}

Если нужно на каком-нибудь mawk, можно "изображать" BASIC с кучей substr, index и проч.


"заменить часть строки в awk"
Отправлено new_user721 , 18-Сен-08 15:38 
>[оверквотинг удален]
>BEGIN {
>str="some_text KEY_WORD2 some_text     )"
>print str
>str=gensub("^\(some_text \+\)([^ )][^)]+[^ )])( *\\))","\\1'\\2'\\3",1,str)
>print str
>exit
>}
>
>Если нужно на каком-нибудь mawk, можно "изображать" BASIC с кучей substr, index
>и проч.

спасибо
как можно ето сделать с файлом ?
типа в файле заменить все строки по етому скрипту


"как заменить часть строки в awk?"
Отправлено angra , 18-Сен-08 16:51 
Может все-таки лучше sed или perl? Использование инструментов не по назначению не лучшая идея.

"как заменить часть строки в awk?"
Отправлено new_user721 , 18-Сен-08 21:19 
>Может все-таки лучше sed или perl? Использование инструментов не по назначению не
>лучшая идея.

подскажете как перлом?


"как заменить часть строки в awk?"
Отправлено angra , 18-Сен-08 23:44 
Да почти как и при помощи sed. Перл удобней если задача требует привлечения различных инструментов типа awk/sed/grep итд, он просто совмещает все в себе.
Пример:
$ echo "some_text KEY_WORD2 some_text    ) another text" |perl -pe 's/KEY_WORD2([^)]*\))/"KEY_WORD2$1"/'
some_text "KEY_WORD2 some_text    )" another text

"как заменить часть строки в awk?"
Отправлено anf , 18-Сен-08 23:05 
>Из
>some_text KEY_WORD2 some_text     )
>получить:
>some_text 'KEY_WORD2 some_text' )
>вобшем заключить в кавычки KEY_WORD2 и все что следует за етим до
>скобки
>thanks

echo "some_text KEY_WORD2 some_text)" | sed -e "s/KEY_WORD2/\'KEY_WORD2/" -e "s/)$/\')/"

some_text 'KEY_WORD2 some_text')


"как заменить часть строки в awk?"
Отправлено new_user721 , 18-Сен-08 23:55 
>[оверквотинг удален]
>>some_text KEY_WORD2 some_text     )
>>получить:
>>some_text 'KEY_WORD2 some_text' )
>>вобшем заключить в кавычки KEY_WORD2 и все что следует за етим до
>>скобки
>>thanks
>
>echo "some_text KEY_WORD2 some_text)" | sed -e "s/KEY_WORD2/\'KEY_WORD2/" -e "s/)$/\')/"
>
>some_text 'KEY_WORD2 some_text')

thanks
ставит кавычку перед последней скобкой а не сразу перед первой :(
echo "some_text KEY_WORD2 some_text) )"| sed -e "s/KEY_WORD2/\'KEY_WORD2/" -e "s/)$/\')/"
some_text 'KEY_WORD2 some_text) ')


"как заменить часть строки в awk?"
Отправлено angra , 19-Сен-08 01:45 
Варианты для perl и sed. Обратите внимание на отличия в синтаксисе регексов.
$ echo "some_text KEY_WORD2 some_text) ) other text"| perl -pe "s/KEY_WORD2([^)]*)\)/'KEY_WORD2\$1')/"
some_text 'KEY_WORD2 some_text') ) other text

$ echo "some_text KEY_WORD2 some_text) ) other text"| perl -pe "s/KEY_WORD2([^)]*)\)/'KEY_WORD2\1')/"
some_text 'KEY_WORD2 some_text') ) other text

$ echo "some_text KEY_WORD2 some_text) ) other text"| sed -e "s/KEY_WORD2\([^)]*\))/'KEY_WORD2\1')/"
some_text 'KEY_WORD2 some_text') ) other text

$ echo "some_text KEY_WORD2 some_text) ) other text"| sed -re "s/KEY_WORD2([^)]*)\)/'KEY_WORD2\1')/"
some_text 'KEY_WORD2 some_text') ) other text


"как заменить часть строки в awk?"
Отправлено new_user721 , 19-Сен-08 04:35 
>[оверквотинг удален]
>some_text 'KEY_WORD2 some_text') ) other text
>
>$ echo "some_text KEY_WORD2 some_text) ) other text"| perl -pe "s/KEY_WORD2([^)]*)\)/'KEY_WORD2\1')/"
>some_text 'KEY_WORD2 some_text') ) other text
>
>$ echo "some_text KEY_WORD2 some_text) ) other text"| sed -e "s/KEY_WORD2\([^)]*\))/'KEY_WORD2\1')/"
>some_text 'KEY_WORD2 some_text') ) other text
>
>$ echo "some_text KEY_WORD2 some_text) ) other text"| sed -re "s/KEY_WORD2([^)]*)\)/'KEY_WORD2\1')/"
>some_text 'KEY_WORD2 some_text') ) other text

большое спасибо работает как в аптеке :)