come trovare il numero di sottostringhe tra delimitatore? [chiuso]


-1

Ho la stringa seguente

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

come trovare il numero di

qualcosa (s)

nella stringa.


Cosa stai cercando esattamente? Qualche stringa seguita da ()? La tua stringa contiene effettivamente ^? Ti preghiamo di mostrarci un esempio dei dati reali con cui stai lavorando.
Terdon,

Per continuare la domanda di Terdon, stai davvero parlando di stringhe che terminano con numeri tra parentesi o stai parlando di un mucchio di stringhe arbitrarie separate da ^^^delimitatori?
Scott,

one^^^two^^^three^^^... ^^^somenumber quindi voglio trovare il numero di stringhe che sono delimitate dal delimitatore "^^^".
Dinesh Dabhi,

Risposte:


1

Questo comando farà per te:

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

e puoi sostituire il tuo separatore di campo preferito per lo spazio. Se insisti nell'usare ^^^ come separatore di campo, allora dovresti usare

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

0

Posso darti una risposta migliore se mostri i tuoi dati reali ma supponendo che tu stia cercando lo spazio non bianco più lungo contenente una stringa che termina (), puoi farlo:

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

Spiegazione

Il -Pflag per grepabilita i PCRE e ne -ocausa la stampa di ciascuna delle stringhe corrispondenti e su una riga separata.

L'espressione regolare corrisponde a:

  • [^\s]+ : il maggior numero possibile di caratteri non bianchi
  • \(: una parentesi iniziale
  • [^\)]+?\): il maggior numero possibile di non )caratteri fino al primo ).

Questo stamperebbe:

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

Quindi lo passi attraverso wc -lper contare il numero di righe.


1
Molto probabilmente ha usato (n)solo per dimostrarci la quantità di something. 1, 2, 3, ... n. Voglio dire, probabilmente non finisce ().
VL-80,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.