LINUX.ORG.RU

Как с помощью sed избавиться от вызова функции вокруг аргумента

 


0

3

В тексте встречаются строки типа <мусор> func_call("argument") <мусор>. Каким образом можно sed'ом как-то обработать подстроки так, что бы убрать 'func_call(' и закрывающую скобку ')' (т.е. оставить только «argument» в этом месте)?

★★★★★
$ echo '<мусор> func_call("argument") <мусор>' | sed 's/.* func_call(//g' | sed 's/) .*//g'

"argument"


ymuv ★★★★
()
Последнее исправление: ymuv (всего исправлений: 2)

Или так:

$ echo '<мусор> func_call("argument") <мусор>' | sed -e 's/>.*("/> "/g' -e 's/")/"/g'
<мусор> "argument" <мусор>

joy4eg ★★★★★
()
$ echo '<мусор> func_call("argument") <мусор>' | sed "s/.*func_call(\"\(.*\)\").*\"/\1/g"
r3lgar ★★★★★
()

я как то так делал - добавлял \n до скобок, cut-ом вырезал, потом awk и sed'ом все обратно собирал
Еще есть tr

mystery ★★
()

Вспомнил: echo «<мусор> func_call(„argument“) <мусор>»|sed 's/func_call//'|tr -d "()"

mystery ★★
()

Спасибо большое всем откликнувшимся!

deterok ★★★★★
() автор топика

Мусор убираем? Если да, то вот ещё вариант, без привязки к идентификатору «func_call» (но предполагается, что комбинация ("...") не встречается в «мусоре»):

sed -r 's/^.*\("(.*)"\).*$/"\1"/'

x-signal ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.