Imprime texto entre (e incluindo) dois delimitadores em uma linha

3

Qual é a melhor maneira de imprimir o texto entre (e incluindo) o primeiro padrão ("SELECT" ou "SSELECT") e um segundo padrão ("[") usando uma linha de comando (por exemplo, cut, sed, awk )?

Por exemplo, considerando o seguinte:

 54001744  KB035928      20  /dev/pts/8      SELECT PRINTER.LOCS WITH SHIP.TICK.BR = "15" [ INP @ 0x67E ]
 26083642  RV091101      25  /dev/pts/14     SSELECT PRODUCT BY STK.LN.SEQ [ MENU.SELECT @ 0x10C ]
 57082018  hajohug     0xACEBF1C1  SELECT ORDER.QUEUE WITH &INDEX&.STATUS = "S~S]" "H~S]" "A~S]" "M~S]" AND WITH &INDEX&.SBR "51 17~]" [ SOE.PH.ORDER.PRINT @ 0x384 ]
 50266386  hajohug     0xACEBF2F0  SSELECT UD.VIEWS WITH &INDEX& = "ORDERENTRY.ORDERENTRY~0" [ SOCKET.READ @ 0x168 ]

O resultado deve ser:

SELECT PRINTER.LOCS WITH SHIP.TICK.BR = "15"
SSELECT PRODUCT BY STK.LN.SEQ
SELECT ORDER.QUEUE WITH &INDEX&.STATUS = "S~S]" "H~S]" "A~S]" "M~S]" AND WITH &INDEX&.SBR "51 17~]"
SSELECT UD.VIEWS WITH &INDEX& = "ORDERENTRY.ORDERENTRY~0"

Eu tentei usar o corte, mas não consegui fazer as coisas parecerem certas.

    
por aaltonen 19.03.2014 / 15:33

5 respostas

0

Para corresponder exatamente à sequência final entre colchetes:

perl -alne 'm/S?SELECT.*?(?=\[ \S+ @ \S+ \]$)/ && print $&;' file

saídas

SELECT PRINTER.LOCS WITH SHIP.TICK.BR = "15" 
SSELECT PRODUCT BY STK.LN.SEQ 
SELECT ORDER.QUEUE WITH &INDEX&.STATUS = "S~S]" "H~S]" "A~S]" "M~S]" AND WITH &INDEX&.SBR "51 17~]" 
SSELECT UD.VIEWS WITH &INDEX& = "ORDERENTRY.ORDERENTRY~0" 
    
por 19.03.2014 / 18:35
3

algo como

sed 's@.*\(S*SELECT[^[]*\).*@@' foo

deve fazer o truque

    
por 19.03.2014 / 15:41
2

Você pode usar perl :

perl -nle 'print $1 if /(S?SELECT.*?)\[/' file

ou usando grep :

grep -Po 'S?SELECT.*?(?=\[)' file
    
por 19.03.2014 / 15:46
1

Você pode até usar grep e sed conforme abaixo.

grep -o 'SELECT.*$\|SSELECT.*$'  new.txt | sed 's/\[.*//'
    
por 19.03.2014 / 17:53
1

Aqui está uma solução% POSIX grep :

grep -oE 'S?SELECT[^[]*' infile
    
por 19.03.2014 / 18:06

Tags