como encontrar o número de substrings entre delimitador? [fechadas]


-1

Eu tenho a seguinte sequência

Algo (1) ^^^ Algo (2) ^^^ Algo (3) ^^^ ... ^^^ Algo (n)

como encontrar o número de

algumas coisas)

na cadeia.


O que exatamente você está procurando? Alguma sequência seguida por ()? Sua string realmente contém ^? Por favor, mostre-nos um exemplo dos dados reais com os quais você está trabalhando.
terdon 7/01/14

Para continuar a pergunta de Terdon, você está realmente falando sobre cadeias que terminam com números entre parênteses ou está falando sobre um monte de cadeias arbitrárias que são separadas por ^^^delimitadores?
Scott

one^^^two^^^three^^^... ^^^somenumber Então, eu quero encontrar o número de seqüência de caracteres que são delimitados pelo delimitador "^^^".
Dinesh Dabhi

Respostas:


1

Este comando fará por você:

 awk -F " " '{print NF}' filename

e você pode substituir o seu separador de campo favorito pelo espaço. Se você insistir em usar ^^^ como um separador de campos, deverá usar

  awk -F '\\^\\^\\^'  "{print NF}" filename

0

Posso dar uma resposta melhor se você mostrar seus dados reais, mas supondo que você esteja procurando o maior espaço não em branco que contenha sequência que termina com (), você pode fazer o seguinte:

$ string="foo(bar)blah blah bob harry(baz) more stuff this(one) not that one ()"
$ echo $string | grep -Po '[^\s]+\([^\)]+?\)' | wc -l
3

Explicação

O -Psinalizador para grephabilita PCREs e -ofaz com que imprima apenas cada uma das cadeias correspondentes e em uma linha separada.

A expressão regular corresponde:

  • [^\s]+ : o maior número possível de caracteres que não sejam espaços em branco
  • \(: um parêntese de abertura
  • [^\)]+?\): o maior número )possível de caracteres até o primeiro ).

Isso imprimiria:

$ echo $string | grep -Po '[^\s]+\([^\)]+?\)' 
foo(bar)
harry(baz)
this(one)

Você passa isso wc -lpara contar o número de linhas.


1
Muito provavelmente ele usou (n)apenas para nos demonstrar uma quantidade de something. 1, 2, 3, ... n. Quero dizer, provavelmente não termina ().
VL-80
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.