Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=6823215&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 12:50:44 2016
Кодировка: Windows-1251
[sed/awk/?]как выделить слово из строки, идущее после заданного слова? - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 0 | 20 | показать все | след. страница
Basilio
GreenOne

Рег.: 14.10.2002
Сообщений: 13749
Из: Москва
Рейтинг: 3476
  [sed/awk/?]как выделить слово из строки, идущее после заданного слова?
      02.11.2007 21:53
1

т.е. имеется файл со строками примерно такого вида:
code:
bla-bla-bla KEYWORD "id" bla-bla-bla bla-bla-bla KEYWORD "id" bla-bla-bla bla-bla-bla KEYWORD "id" bla-bla-bla bla-bla-bla KEYWORD "id" bla-bla-bla

(файл получен из другого при помощи grep "KEYWORD" file)
где bla-bla-bla: произвольный текст разной длины.
KEYWORD - фиксированное слово (KEYWORD)
"id" - идентификатор в кавычках, идентификаторы от строки к строке могут различаться, а могут и повтроятся.

хотелось бы на выдаче получить список этих идетнтификаторов, трубопровод в uniq я уж в состоянии сделать.

Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Basilio]
      02.11.2007 21:55
 

sed 's/.*KEYWORD "\([0-9]*\)".*/\1/'



я АЭС фачил в эсс!
Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      02.11.2007 21:58
 

даже так наверное лучше: sed 's/.*KEYWORD[^"]*"\([0-9]*\)".*/\1/'
а то может после KEYWORD не пробел, а еще какая-нибудь херь.



я АЭС фачил в эсс!
Basilio
GreenOne

Рег.: 14.10.2002
Сообщений: 13749
Из: Москва
Рейтинг: 3476
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      02.11.2007 22:03
 

идея понятна. почему он всю строку мне печатает. нужно чтобы только id печатал..

id - это буквы-цифры, а не только цифры.

Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Basilio]
      02.11.2007 22:06
 

ну замени на [a-zA-Z0-9]

почему греп всю строку печатает? ну он всегда так делает по умолчанию.
мб можно заставить подстроку печатать, мне лень ман смотреть. =))



я АЭС фачил в эсс!
Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      02.11.2007 22:07
 

sed 's/.*KEYWORD[^"]*"\([^"]*\)".*/\1/'
вот так вообще все что угодно будет в id :D



я АЭС фачил в эсс!
Basilio
GreenOne

Рег.: 14.10.2002
Сообщений: 13749
Из: Москва
Рейтинг: 3476
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      02.11.2007 22:12
 

так вопрос в том и состоит, чтобы только подстроку id и напечатать.

Basilio
GreenOne

Рег.: 14.10.2002
Сообщений: 13749
Из: Москва
Рейтинг: 3476
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      02.11.2007 22:51
-1

в общем, ничего проще придумать не удалось (awk):
code:
{ KWPOS=index($0,"KEYWORD") TMPSTR=substr($0,KWPOS+9,200) IDPOS=index(TMPSTR,"\"") ID=substr(TMPSTR,1,IDPOS-1) print ID }


Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Basilio]
      03.11.2007 00:30
 

бля. а я тебе что написал?

cat log | grep KEYWORD | sed 's/.*KEYWORD[^"]*"\([^"]*\)".*/\1/'



я АЭС фачил в эсс!
mk52
member

Рег.: 11.05.2007
Сообщений: 116
Рейтинг: 65
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Basilio]
      03.11.2007 00:47
 

perl рулит ; )
extract_id.pl:


#!/usr/bin/perl

die "\n\nSYNOPSYS:\n\t$0 input_file\n\n" if (@ARGV < 1);

$inp = $ARGV[0];

die "File $inp doesn't exist" if (!(-e $inp));
open INP, $inp || die "Can't open $inp";

while ($str = <INP>)
{
print "$1\n" if ($str =~ /\s+KEYWORD\s+"([^"]+)"\s+/);
}

close INP;







Редактировал mk52 (03.11.2007 03:31)
maloi
Зануда

Рег.: 09.05.2006
Сообщений: 6506
Из: $(pwd)
Рейтинг: 2880
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      03.11.2007 00:48
 

sed 's/^.*KEYWORD[^"]*"\([^"]*\)".*$/\1/'
может так лучше будет?



Помни: убив анимешника, ты повышаешь скорость сети на 5%
Basilio
GreenOne

Рег.: 14.10.2002
Сообщений: 13749
Из: Москва
Рейтинг: 3476
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      03.11.2007 00:55
 

твое печатает всю строку целиком. мое печатае только id.

botWi

Рег.: 22.11.2003
Сообщений: 10160
Из: Moscow
Рейтинг: 1764
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Basilio]
      03.11.2007 04:49
 

В ответ на:

твое печатает всю строку целиком.




дык его не срабатывает
я sed не знаю
но \( ОЧЕНЬ смущает
может все таки просто ()
 без слешей7



Хватит дрочить на рейтинги
mmCleric

Рег.: 19.09.2004
Сообщений: 459
Из: Здесь
Рейтинг: 263
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Basilio]
      03.11.2007 05:26
2

Эх... Отвечу всем сразу, раз все знаю :)
Во-первых,
code:
sed -n 's/.*KEYWORD[^"]*"\([^"]*\)".*/\1/p'

, чтобы не печатать те строки, в которых KEYWORD почему-то отсутствует. (вероятно, поэтому и проблемы).
Во-вторых, \) и \) нужны, потому что это basic RE, а не extended.
В-третьих, нормальное решение на перле будет выглядеть так:
 
code:
perl -nle '/KEYWORD\s+"(.*?)"/ and print $1'
, а не тот ужас, который там выше написан.



-Ofun
Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Basilio]
      03.11.2007 05:36
1

code:
bachan@bugaga ~/zzz $ cat aaa bla-bla-bla KEYWORD "id" bla-bla-bla bla-bla-bla KEYWORD "id" bla-bla-bla bla-bla-bla KEYWORD "id" bla-bla-bla bla-bla-bla KEYWORD "id" bla-bla-bla bachan@bugaga ~/zzz $ cat aaa | grep KEYWORD | sed 's/.*KEYWORD[^"]*"\([^"]*\)".*/\1/' id id id id

честно. =)

слэши перед скобками нужны:


code:
$ info sed The `s' Command =============== The syntax of the `s' (as in substitute) command is `s/REGEXP/REPLACEMENT/FLAGS'. The `/' characters may be uniformly replaced by any other single character within any given `s' command. The `/' character (or whatever other character is used in its stead) can appear in the REGEXP or REPLACEMENT only if it is preceded by a `\' character. The `s' command is probably the most important in `sed' and has a lot of different options. Its basic concept is simple: the `s' command attempts to match the pattern space against the supplied REGEXP; if the match is successful, then that portion of the pattern space which was matched is replaced with REPLACEMENT. The REPLACEMENT can contain `\N' (N being a number from 1 to 9, inclusive) references, which refer to the portion of the match which is contained between the Nth `\(' and its matching `\)'. Also, the REPLACEMENT can contain unescaped `&' characters which reference the whole matched portion of the pattern space. Finally, as a GNU `sed' extension, you can include a special sequence made of a backslash and one of the letters `L', `l', `U', `u', or `E'. The meaning is as follows:


что касается ^$, вроде разницы нет.
как ^.* может отличаться от .* в начале? ну и .*$ от .* в конце.



я АЭС фачил в эсс!
Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: mmCleric]
      03.11.2007 05:37
 

> чтобы не печатать те строки, в которых KEYWORD почему-то отсутствует.
он же написал, что делал grep KEYWORD. =)



я АЭС фачил в эсс!
mmCleric

Рег.: 19.09.2004
Сообщений: 459
Из: Здесь
Рейтинг: 263
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      03.11.2007 05:41
 

> он же написал, что делал grep KEYWORD. =)
Угу, я угадать пытался, почему могло быть
> твое печатает всю строку целиком. мое печатае только id.



-Ofun
Bachan
god's pee

Рег.: 26.10.2002
Сообщений: 37551
Рейтинг: 5335
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      03.11.2007 05:42
 

ладно, не спорю, KEYWORD мог оказаться не там еще при grep-е.

но не мог же он ПОСТОЯННО оказываться не там, что привело к тому,
что sed ни для одной строки не нашел совпадений и вывел их все, как было. :D



я АЭС фачил в эсс!
Basilio
GreenOne

Рег.: 14.10.2002
Сообщений: 13749
Из: Москва
Рейтинг: 3476
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: Bachan]
      03.11.2007 10:02
 

странно, но под виндой у меня sed одиночные кавычки '' не скушал. :crazy:

mk52
member

Рег.: 11.05.2007
Сообщений: 116
Рейтинг: 65
  Re: [sed/awk/?]как выделить слово из строки, идущее после заданного сл [re: mmCleric]
      03.11.2007 14:47
 

Quote:

code:
perl -nle '/KEYWORD\s+"(.*?)"/ and print $1'
, а не тот ужас, который там выше написан.




хм
а в чем ужас-то?
в том чтот скрипт заменяетвсе эти cat | grep | sed ?
или может быть non-greedy выражение лучше чем просто ([^"]+)?

кроме того реализаций sed'а не одна, а на перле если уж что-то работает, то работать будет везде.

Страницы: 0 | 20 | показать все | след. страница

Technical >> Development (Archive)

Дополнительная информация
2 зарегистрированных и 1 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы
>>
Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в