Автор Гілка: grep та регулярні вирази  (Прочитано 3019 раз)

Відсутній root_x

  • Кореспондент
  • ***
  • дописів: 225
  • Карма: +0/-0
  • I Love YaBB 2!
Як у bash помилки перенаправити інішій команді по конвеєру, не використовуючи тимчасовий файл?
-------------------
У файлі є чотири слова root
rdr@rdr:~$ grep root passwd
operator:x:11:0:operator:/root:/bin/bash
root:x:0:0::/root:/bin/bash
root
rdr@rdr:~$ grep -c root passwd      #команда нараховує три рядка.Це я розумію
3                        #тому, що два рази слово повтрюється в одному

#Вивести перші два співпадіння (??)
rdr@rdr:~$ last |grep -i sep -m2
rdr      :0                            Thu Sep 20 22:03   still logged in
reboot   system boot  2.6.17.13-rdr-ok Thu Sep 20 22:01          (02:11)

Про ^ та $ я зрозумів, що до чого:
rdr@rdr:~$ grep :$ passwd -m2
adm:x:3:4:adm:/var/log:
bin:x:1:1:bin:/bin:
-------------------------------------------------------------------------
Про команду man grep я знаю, але щось я неможу аж ніяк зрозуміти регулярних виразів.
Конкретніше до підпункту REGULAR EXPRESSIONS ще якось розуміється, а після не дуже.

Питання: Як вивести рядки, якщо співпадінь рівно Х, або більше ніж Х?
У файлі ~/passwd рядків із словом root 3,
параметри:
{n}    The preceding item is matched exactly n times.
означає вивід, якщо співпадань строго n
---------------
{n,}   The preceding item is matched n or more times.
означає ?вивести, якщо співпадань n або більше.

Куди ліпити цю опцію?
rdr@rdr:~$ grep root  passwd -m,2
grep: неверное максимальное количество совпадений

#Були і інші спроби щось сотворити, але нічого потрібного не виходить.

*********************************
Що я хочу від Вас? Та нічого складного, просто покажіть мені і всім як приввильно використовувати параметри цієї команди.
Тут на прикладах.

... і ще декілька прикладів використання регулярних виразів, у цій команді, я хочу побачити тут.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: grep та регулярні вирази
« Відповідей #1 : 2007-09-22 08:35:04 »
Як у bash помилки перенаправити інішій команді по конвеєру, не використовуючи тимчасовий файл?
Наскільки я знаю, таке не є можливим. Для такої задачі краще взяти перл.

Питання: Як вивести рядки, якщо співпадінь рівно Х, або більше ніж Х?
...
Куди ліпити цю опцію?
НМД, вам тут потрібен sed, а не grep. {x,y} - то стосовно співпадань всередині рядку.
isbear@monstruozo:~$ cat test.txt
aate
dsgggrhf
dfghhf
dfg
draa
bvdaa
ertyaa
greea
sdgseraater
isbear@monstruozo:~$ sed -n -e '/aa/!d;x;s/$/x/;/^x\{2,4\}$/!bE1;x;p;b E2; :E1;x;:E2' test.txt
draa
bvdaa
ertyaa
isbear@monstruozo:~$

Якщо треба 2 або більше: $ sed -n -e '/aa/!d;x;s/$/x/;/x\{2\}/!bE1;x;p;b E2; :E1;x;:E2' test.txt
:)

Втім, можна й простіше:
isbear@monstruozo:~$ grep aa test.txt | head -n 4 | tail -n 3
draa
bvdaa
ertyaa
isbear@monstruozo:~$

Відсутній root_x

  • Кореспондент
  • ***
  • дописів: 225
  • Карма: +0/-0
  • I Love YaBB 2!
Re: grep та регулярні вирази
« Відповідей #2 : 2007-09-23 14:54:17 »
Наскільки я знаю, таке не є можливим. Для такої задачі краще взяти перл.
...
 НМД, вам тут потрібен sed, а не grep. {x,y} - то стосовно співпадань всередині рядку.
...
Фух, а я зациклився тільки на grep.
З задоволення можна переходити до "крутих розбірок" з sed.

Про перенаправлення помилок: також я завис, :-[ і не міг додуматись, що у bash це не можливо.

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: grep та регулярні вирази
« Відповідей #3 : 2007-09-24 06:22:39 »
Як у bash помилки перенаправити інішій команді по конвеєру, не використовуючи тимчасовий файл?
mycomman 2>&1 | grep "error"

щоправда це об'єднає стандартний вивід з помилками...

можна ще зробити таку штуку (міняє stderr та stdout місцями):
mycommand 3>&2 2>&1 1>&3-...

ну і там далі ще можна багато накрутити, тобто, якщо є бажання скрутити собі мізки, то можна й без перлу обійтись :)
Fedora 35 (x86-64)

Відсутній root_x

  • Кореспондент
  • ***
  • дописів: 225
  • Карма: +0/-0
  • I Love YaBB 2!
Re: grep та регулярні вирази
« Відповідей #4 : 2007-09-25 14:43:03 »
... mycomman 2>&1 | grep "error"

щоправда це об'єднає стандартний вивід з помилками...
Отож.
Цитата
... якщо є бажання скрутити собі мізки, то можна й без перлу обійтись :)
Добре, що вони є, (чи може "начебто є").  :-/