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{/
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?
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
)
Tags sed