Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Помогите с синтаксисом в скрипте  (Прочитано 612 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DDDstart

  • Автор темы
  • Участник
  • *
  • Сообщений: 197
  • Linux создан для сети, как птица для полета
    • Просмотр профиля
Помогите с синтаксисом в скрипте
« : 13 Октябрь 2014, 09:17:00 »
hi2all!
Нужно обработать лог на наличие в нем СЛОВА1 и СЛОВА2.
Причем СЛОВО2 в логе встречается в квадратных скобках, т.е. [СЛОВО2].
Кроме того, СЛОВО1 и СЛОВО2 встречаются в логе не одно за другим.

Сначала я сделал как-то так:

(Нажмите, чтобы показать/скрыть)

Но в этом случае, "cat $LOG grep [CЛОВО2]" (если его оставить в квадратных скобках) разбивает слово на буквы.
Пытался его вычленить каким-нибудь образом, используя кавычки, одинарные кавычки, косые одинарные кавычки и т.д. - не получилось.

Может, подскажет кто-нибудь правильную конструкцию?
Неверующие остаются неверующими только до момента своей смерти

Оффлайн dio4

  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Re: Помогите с синтаксисом в скрипте
« Ответ #1 : 13 Октябрь 2014, 10:42:02 »
Задача в чем? Вывод строк, содержащих СЛОВО1 и [СЛОВО2]? Как должны следовать СЛОВО1 и [СЛОВО2]? В одной строке в произвольном порядке оба слова, или хотя бы раз любое из слов в строке, или какая-то другая логика? Напишите точнее. И покажите вывод того, что есть у вас после обработки (часть вывода) чтобы понять, что есть, что нужно и что не получается. И код скрипта приведите.

Не пробовали символ конвейера вставить? cat $LOG | grep [CЛОВО2]  те |
« Последнее редактирование: 13 Октябрь 2014, 10:59:08 от dio4 »

Оффлайн wtsch

  • Участник
  • *
  • Сообщений: 213
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #2 : 13 Октябрь 2014, 11:16:16 »
DDDstart,
Это?
cat $LOG | grep -i "(СЛОВО1|СЛОВО2)"

Оффлайн dio4

  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Re: Помогите с синтаксисом в скрипте
« Ответ #3 : 13 Октябрь 2014, 11:22:26 »
DDDstart,
Это?
cat $LOG | grep -i "(СЛОВО1|СЛОВО2)"

слово [СЛОВО2] должно быть в [] Напишите точно, что конкретно вам нужно.

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 724
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #4 : 13 Октябрь 2014, 11:22:41 »
DDDstart,
подбором сработало так  :)
grep \\[СЛОВО2\\]

Оффлайн dio4

  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Re: Помогите с синтаксисом в скрипте
« Ответ #5 : 13 Октябрь 2014, 11:27:07 »
DDDstart,
подбором сработало так  :)
grep \\[СЛОВО2\\]

тут нет СЛОВО1

Оффлайн wtsch

  • Участник
  • *
  • Сообщений: 213
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #6 : 13 Октябрь 2014, 11:29:30 »
DDDstart,
Это?
cat $LOG | grep -i "(СЛОВО1|СЛОВО2)"

слово [СЛОВО2] должно быть в [] Напишите точно, что конкретно вам нужно.

cat $LOG | grep -i "(СЛОВО1|\[СЛОВО2\])"

Оффлайн dio4

  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Re: Помогите с синтаксисом в скрипте
« Ответ #7 : 13 Октябрь 2014, 11:37:55 »
DDDstart,
Это?
cat $LOG | grep -i "(СЛОВО1|СЛОВО2)"

слово [СЛОВО2] должно быть в [] Напишите точно, что конкретно вам нужно.

cat $LOG | grep -i "(СЛОВО1|\[СЛОВО2\])"

так лучше )) осталось только узнать, что нужно автору ))) У него некорректно задача поставлена. А - в Linux избегают же имен типа $LOG в своих задачах, тк они зарезервированы за встроенными переменными окружения в оболочку :) надо поправить на строчные буквы.
« Последнее редактирование: 13 Октябрь 2014, 11:42:58 от dio4 »

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 724
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #8 : 13 Октябрь 2014, 12:10:16 »
dio4,
А что лучше?
wtsch,
вы хоть проверяйте, что советуете.

Автор не может заэкранировать квадратные скобки. Экранируются они так:
\\[СЛОВО2\\]

Оффлайн dio4

  • Любитель
  • *
  • Сообщений: 65
  • Software is like sex: it's better when it's free
    • Просмотр профиля
    • Документация FreeBSD, Linux, Cisco
Re: Помогите с синтаксисом в скрипте
« Ответ #9 : 13 Октябрь 2014, 12:18:00 »
Лучше то, что во второй раз автор указал в []  что и просилось исходно. Я это проверять не должен, пусть автор проверяет. Я жду конкретизации исходной задачи - до сих пор не понятно, что нужно просящему помощи  :) нет смысла обсуждать синтаксис, когда не ясна исходная задача. Мы даже не знаем, чего хотим на выходе  получить )))   "обработать лог на наличие..." - тоже, что искать жизнь на Марсе, находясь на Земле. Так что надо подождать. Может и не надо ничего экранировать )) и вообще применять РВ. Кстати, RingOV - вы тоже в первом варианте пропустили целую литеру и ничего  :)
« Последнее редактирование: 13 Октябрь 2014, 12:28:38 от dio4 »

Оффлайн wtsch

  • Участник
  • *
  • Сообщений: 213
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #10 : 13 Октябрь 2014, 12:39:46 »
RingOV,
wtsch,
вы хоть проверяйте, что советуете.
Автор не может заэкранировать квадратные скобки. Экранируются они так:
\\[СЛОВО2\\]
А в чем проблема? Это работает

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 724
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #11 : 13 Октябрь 2014, 13:04:51 »
dio4,
Ну тогда может стоит воздержаться от комментариев не несущих полезную информацию?
(риторический вопрос)

Заинтересовался задачей, одно из решений:
1. Слова в одной строчке
cat $LOG | grep СЛОВО1 | grep \\[СЛОВО2\\]
2. Слова могут быть в разных строчках
cat $LOG | grep "СЛОВО1\|\\[СЛОВО2\\]"

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5626
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #12 : 13 Октябрь 2014, 14:05:06 »
О, надо поддержать. :-\
  • Работают варианты кроме \\[СЛОВО2\\] , еще и "\[СЛОВО2\]" и такой экзотический [[]СЛОВО2[]]. Но если Вам не нужны спецсимволы почему не использовать grep -F [СЛОВО2]?
  • А зачем искать именно в скобках? Или зачем-то надо отсеять варианты где слово2 не в скобках?
« Последнее редактирование: 13 Октябрь 2014, 14:13:55 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн DDDstart

  • Автор темы
  • Участник
  • *
  • Сообщений: 197
  • Linux создан для сети, как птица для полета
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #13 : 13 Октябрь 2014, 14:28:13 »
Задача в чем? Вывод строк, содержащих СЛОВО1 и [СЛОВО2]? Как должны следовать СЛОВО1 и [СЛОВО2]? В одной строке в произвольном порядке оба слова, или хотя бы раз любое из слов в строке, или какая-то другая логика? Напишите точнее. И покажите вывод того, что есть у вас после обработки (часть вывода) чтобы понять, что есть, что нужно и что не получается. И код скрипта приведите.

Не пробовали символ конвейера вставить? cat $LOG | grep [CЛОВО2]  те |

Задача в том, чтобы в логе найти строки, где СЛОВО1 и [СЛОВО2] находятся в одной строке. Между ними встречаются другие символы.
Почитал, что советуете, реально срабатывает:
cat $LOG | grep -ER "(СЛОВО1|\[СЛОВО2\])" , ($LOG - это переменная, объявляется в начале скрипта - путь до лога)

Но выводит только строки, содержащие или 2 слова вместе или каждое по отдельности.
Нужен именно первый вариант.

Только почему все советуют использовать | (вертикальную черту???) - это ведь логическое или, а мне нужно И
Если делаю так:

cat $LOG | grep -ER "(СЛОВО1| && [СЛОВО2\]) - ничего не срабатывает



Пользователь решил продолжить мысль [time]13 Октябрь 2014, 14:29:20[/time]:
DDDstart,
Это?
cat $LOG | grep -i "(СЛОВО1|СЛОВО2)"

не работает


Пользователь решил продолжить мысль [time]13 Октябрь 2014, 14:30:13[/time]:
DDDstart,
Это?
cat $LOG | grep -i "(СЛОВО1|СЛОВО2)"

слово [СЛОВО2] должно быть в [] Напишите точно, что конкретно вам нужно.

Да, СЛОВО2 в логе именно в квадратных кавычках и именно так его нужно отловить

Пользователь решил продолжить мысль [time]13 Октябрь 2014, 14:31:49[/time]:
DDDstart,
подбором сработало так  :)
grep \\[СЛОВО2\\]

Да, на твоем примере и сделал, но только так:
cat $LOG | grep -ER "(СЛОВО1|\[СЛОВО2\])

только логика должна быть И

Пользователь решил продолжить мысль [time]13 Октябрь 2014, 14:33:01[/time]:
cat $LOG | grep -i "(СЛОВО1|\[СЛОВО2\])"

не фурычит так

Пользователь решил продолжить мысль 13 Октябрь 2014, 14:37:52:
Я жду конкретизации исходной задачи - до сих пор не понятно, что нужно просящему помощи  :) нет смысла обсуждать синтаксис, когда не ясна исходная задача. Мы даже не знаем, чего хотим на выходе  получить )))   "обработать лог на наличие..." - тоже, что искать жизнь на Марсе, находясь на Земле. Так что надо подождать. Может и не надо ничего экранировать )) и вообще применять РВ. Кстати, RingOV - вы тоже в первом варианте пропустили целую литеру и ничего  :)

Да какая разница, зачем.
Ну если ООООЧЕНЬ нужно, то вот за этим:

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 13 Октябрь 2014, 14:37:52 от DDDstart »
Неверующие остаются неверующими только до момента своей смерти

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14855
  • Я не слышу.
    • Просмотр профиля
Re: Помогите с синтаксисом в скрипте
« Ответ #14 : 13 Октябрь 2014, 14:44:39 »
DDDstart,
v2@v2:~$
v2@v2:~$ echo -e "1\n2\nSLOVA1\n3\n4\nSLOVA2\n6\n7"
1
2
SLOVA1
3
4
SLOVA2
6
7
v2@v2:~$ echo -e "1\n2\nSLOVA1\n3\n4\nSLOVA2\n6\n7" | sed '/SLOVA1/,/SLOVA2/d'
1
2
6
7
v2@v2:~$ echo -e "1\n2\nSLOVA1\n3\n4\nSLOVA2\n6\n7" | sed '/SLOVA1/,/SLOVA2/!d'
SLOVA1
3
4
SLOVA2
v2@v2:~$

?
~.o

 

Страница сгенерирована за 0.063 секунд. Запросов: 24.