LINUX.ORG.RU

[e]grep: выборка строк


0

2

Возникла задачка... застопорился на решении :)

Есть файл вида:

1 {0}  {0}  (1) [2] <3> {0} sdfgdf <3> [2] {0}
2 {0}  {0}  (1) [2] <3> {0} sdf {0}{0}{0}gdf <3> ={0} {0} {0} {0} [2] 3 {0}
3 {0}  {0}  (1) [2] <3> {0} sdf {0}{0}{0}gdf <3> ={0}-{0} [2] {0}
4 blabla {0}  {0}  (1) [2] <3> {0} sdf {0}{0}{0}gdf <3> ={0}^{0} [2] {0}
5 {0}  {0}  blabla(1) [2] <3> {0} sdf {0}{0}{0}gdf <3> ={0[2]}{0} [2] {0}
6 {0}  {0}  (1) [2] <3> {0} sdf {0}{0}{0}gdf <3> <3> ={0}{0} [2] {0}

Номера в начале - это номера строк для наглядности.

Условие: выбрать такие строки, где подстроки {0},(1),[2],<3> повторяются в произвольном порядке в строке до десяти раз, разделенные различным количеством любых символов, кроме ^ и -

после применения грепа нужно получить строки:

1 {0}  {0}  (1) [2] <3> {0} sdfgdf <3> [2] {0}
2 {0}  {0}  (1) [2] <3> {0} sdf {0}{0}{0}gdf <3> ={0} {0} {0} {0} [2] 3 {0}
6 {0}  {0}  (1) [2] <3> {0} sdf {0}{0}{0}gdf <3> <3> ={0}{0} [2] {0}

строки 3 и 4 содержат ^ и -

Строка 5 имеет неправильный элемент {0[2]}

Можно ли средствами только лишь grep (grep -E) решить эту задачу?

★★★★★

Последнее исправление: Slavaz (всего исправлений: 1)

> Можно ли средствами только лишь grep (grep -E) решить эту задачу?

IMHO, лучше использовать для этих целей awk (он как раз - для разбора текстов по простым грамматикам).
Там и счетчики, и if'ы есть.

pacify ★★★★★
()

>Можно ли средствами только лишь grep (grep -E) решить эту задачу?
врят ли.
очень сомневаюсь, что такое заработает:
(?:(?:{0}|\(1\)|[2]|<3>)[^^\-\(\)\[\]{}<>]+){1,10}

Можно попытаться вложенными регулярками, но для этого уже нужен перл.

OramahMaalhur
()

>Строка 5 имеет неправильный элемент {0[2]}

А почему это не может считаться разделительными символами? Вроде бы разделительный символы могут быть любые, кроме ^ и -. Или тогда исключать еще скобочки и числа.

Vovka-Korovka ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.