sed script anexado às linhas que começam com?

0

Estou tentando escrever um script sed básico, quero anexar às linhas que começam com SSID: . Aqui está o que estou tentando agora:

#!/bin/sed -f

/^SSID:/ s/*/},\n{/

Com a seguinte entrada:

SSID:                                   '2KLIC Guests'
BSSID:                                  F0:9F:C2:21:03:BA
MODE:                                   Infrastructure
FREQ:                                   2437 MHz
RATE:                                   16 MB/s
SIGNAL:                                 100
SECURITY:                               WPA2
ACTIVE:                                 yes
SSID:                                   'CBMS-2.4GHz'
BSSID:                                  10:BE:F5:25:FD:60
MODE:                                   Infrastructure
FREQ:                                   2412 MHz
RATE:                                   16 MB/s
SIGNAL:                                 0
SECURITY:                               WPA WPA2
ACTIVE:                                 no
SSID:                                   'CIK1000M_AC2.4G_3714'
BSSID:                                  D0:60:8C:03:DB:B4
MODE:                                   Infrastructure
FREQ:                                   2422 MHz
RATE:                                   16 MB/s
SIGNAL:                                 0
SECURITY:                               WPA2
ACTIVE:                                 no

Eu também tentei escapar do : . Alguém pode explicar o que estou fazendo errado aqui?

    
por Philip Kirkbride 26.10.2017 / 14:58

2 respostas

2

Para substituir apenas a linha inteira,

s/^SSID:.*/},\n{/

Se você quiser manter alguns ou todos os conteúdos da linha SSID , tente capturar na regex inicial.

s/^\(SSID:.*\)/\n},\n{/
    
por 26.10.2017 / 15:02
1

Sua expressão sed :

/^SSID:/ s/*/},\n{/

Isso está quase correto, mas * corresponderá a um literal * (já que é o primeiro caractere na expressão regular).

Usando sua maneira de abordar a linha que você gostaria de modificar:

/^SSID:/s/^/},\n{/

Isso encontraria qualquer linha que começasse com a string SSID: e substituiria em },\n{ no início dessas linhas.

Observe que isso requer que o GNU sed interprete a seqüência de escape \n como uma nova linha no texto de substituição.

Com o não-GNU sed , você escreveria

/^SSID:/s/^/},\
{/

ou, se você fez isso a partir da linha de comando com um shell como bash que entende $'...' como uma "string C":

sed '$/^SSID:/s/^/},\\n{/'

(o \\n é para um \ seguido por \n )

    
por 27.10.2017 / 10:30

Tags