використання команди egrep для пошуку рядків, що починаються з одного символу, які також містять деякий рядок


1

Скажімо, у мене є файл, який має деякий ls -lвихід:

waaa- foo.pdf
-bbb- foobar.pdf
-ccc- foobar
waaa- foobar

Я хотів би отримати лише перший рядок

waaa -foo.pdf

як кінцевий результат, і я намагаюся:

egrep -E "^w" .file | egrep -E "*.pdf"

Чи є якийсь спосіб поєднати ці два пошуки?


1
Ви дійсно отримали lsдля відображення рядка режиму, починаючи з w? Наскільки я знаю, вона wвідображається лише в інших позиціях у рядку режиму (де це означає "піддається запису"). Це абсолютно добре, якщо ви цього не зробили, і це лише приклад підсумків. Але якщо вона також представляє собою реальну ситуацію , то це може бути корисно мати додаткові відповіді , показуючи альтернативи розбору виведенняls , як використання findз -permі -nameвипробуваннями і -lsдією.
Елія Каган

Я не думаю, що це насправді дублікат Грепа, який шукає два слова в рядку , що стосується прив'язки до рядків з двома словами, які з’являються в будь-якому місці, і в будь-якому порядку . У цьому питанні рядок повинен починатися певним чином і закінчуватися певним чином.
Елія Каган

Відповіді:


5

Ви повинні написати це так:

egrep "^w.*\.pdf$" filename
  • Засоби починалися з wнаступного будь-якого персонажа і закінчувалися до .pdf.

для логічного "або" ви можете використовувати -eперемикач:

egrep -e pattern1 -e pattern2

означає всі рядки з pattern1або pattern2.

або як запропонував @steeldriver, використовуйте розширений регулярний вираз "або":

egrep "(pattern1|pattern2)"

і як ви знаєте, для розширених регулярних виразів ви повинні використовувати, egrepа не grep, наприклад:

egrep '(bbb|ccc)' # works fine for your file
grep '(bbb|ccc)' # doens't have any result

Для "і" вам потрібно передати його іншому egrep:

grep pattern1 | grep pattern2

означає всі рядки і з pattern1і pattern2.

або використовувати інші інструменти, як-от awk:

awk '/pattern1/ && /pattern2/` filename

у цій команді "" egrep "^ w. * \. pdf $" filename "значенням (\) є" і "?
solfish

Ні, \ використовується для виходу з точки ( .), точка .означає будь-яку таблицю і \.означає точно крапку ..
Ravexina

Перша команда краще, у мене ще немає ніяких знань awk :)
solfish

1
Зауважте, що ви можете використовувати |як простий логічний АБО синтаксис регулярного вираження регулярного вираження (або, що еквівалентно, \|BRE), наприклад, egrep '(pat|mat)'і grep '\(pat\|mat\)'вони є еквівалентомgrep -e pat -e mat
steeldriver

@steeldriver Так, однак це частина регулярного виразу та -eє grepфункціоналом саме так?
Ravexina
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.