sed выбор определенного текста

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

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

Grih65kop
Сообщения: 145

sed выбор определенного текста

Сообщение Grih65kop »

Существует данный текст:

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

blablablablabla
...
<title>123text123</title>
blablablablabla
...


Нужно выбрать из него строчку

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

123text123


Могу решить данную задачу при помощи grep и sed, но вот при помощи одного sed не получается.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: sed выбор определенного текста

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

"sed -n" и флаг "p" команды "s"
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed выбор определенного текста

Сообщение drBatty »

sed -rn 's/.*(123text123).*/\1/p'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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

Re: sed выбор определенного текста

Сообщение Grih65kop »

drBatty писал(а):
16.06.2012 03:08
sed -rn 's/.*(123text123).*/\1/p'

drBatty, текст динамический.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed выбор определенного текста

Сообщение drBatty »

sed '
/dev/random писал(а):
16.06.2012 03:07
"sed -n" и флаг "p" команды "s"

можно и без них

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

sed '/123text123/!d;s//\n&\n/;s/[^\n]*\n//;s/\n.*//'


Grih65kop писал(а):
16.06.2012 03:10
текст динамический.

что это такое?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: sed выбор определенного текста

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

Grih65kop, просто удалите теги title из этой строки так, как вы это сделали бы, если бы строка уже была выбрана grep'ом, но укажите ключ и флаг, которые я назвал. В этом случае строки, где команда s провалится, выведены не будут.
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: sed выбор определенного текста

Сообщение Grih65kop »

drBatty писал(а):
16.06.2012 03:14
sed '
/dev/random писал(а):
16.06.2012 03:07
"sed -n" и флаг "p" команды "s"

можно и без них

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

sed '/123text123/!d;s//\n&\n/;s/[^\n]*\n//;s/\n.*//'


Grih65kop писал(а):
16.06.2012 03:10
текст динамический.

что это такое?

То что он меняется и я его не знаю заранее.
Выбирать нужно то что находится между <title> и </title>.

Сперва я выбирал grep'ом строчку где "<title>.*</title>", а потом уже 's/.*<title>//;s/<\/title>.*//'.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed выбор определенного текста

Сообщение drBatty »

Grih65kop писал(а):
16.06.2012 03:18
Сперва я выбирал grep'ом строчку где "<title>.*</title>", а потом уже 's/.*<title>//;s/<\/title>.*//'.

как скажите

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

sed -n 's/.*<title>//;T;s/<\/title>.*//p'


Grih65kop писал(а):
16.06.2012 03:18
Сперва я выбирал grep'ом строчку где "<title>.*</title>", а потом уже 's/.*<title>//;s/<\/title>.*//'.

дословно

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

sed '/<title>.*<\/title>/!d;s/.*<title>//;s/<\/title>.*//'

или

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

sed -n '/<title>.*<\/title>/{s/.*<title>//;s/<\/title>.*//p}'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: sed выбор определенного текста

Сообщение SLEDopit »

drBatty писал(а):
16.06.2012 03:29

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

sed '/<title>.*<\/title>/!d;s/.*<title>//;s/<\/title>.*//'

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

sed '/<title>.*<\/title>/!d;s/.*<title>\(.*\)<\/title>.*/\1/'

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed выбор определенного текста

Сообщение drBatty »

SLEDopit писал(а):
16.06.2012 08:38
sed '/<title>.*<\/title>/!d;s/.*<title>\(.*\)<\/title>.*/\1/'

в данном случае так наверное тоже можно.
но...

$

$ echo "<title>xxx</title>yyy</title>" |sed '/<title>.*<\/title>/!d;s/.*<title>\(.*\)<\/title>.*/\1/' xxx</title>yyy $ echo "<title>xxx</title>yyy</title>" |sed '/<title>.*<\/title>/!d;s/.*<title>//;s/<\/title>.*//' xxx


мой способ даёт ИМХО "более правильный" результат.

ЗЫЖ

$

$ echo "<title>xxx<title>zzz</title>yyy</title>" |sed '/<title>.*<\/title>/!d;s/.*<title>\(.*\)<\/title>.*/\1/' zzz</title>yyy $ echo "<title>xxx<title>zzz</title>yyy</title>" |sed '/<title>.*<\/title>/!d;s/.*<title>//;s/<\/title>.*//' zzz


ну title может быть вложеным и не бывает, а вот <table> очень даже бывает.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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