Eu tenho dados como:
['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom8/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom9/']
Eu quero cada valor sem aspas um por linha (para que eu possa canalizá-lo para outro comando) como:
/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/
/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/
....
awk -F'[][]' '{print $2}'
remove os colchetes. Não estou entendendo como prosseguir.
Você pode simplesmente remover o início
['
, o final']
e substituir tudo', '
por uma nova linha e excluir uma linha[]
ou@as []
que vejogsettings
usando para representar listas vazias de strings (onde o@as
prefixo especifica que a matriz é umaa
matriz des
trings).Com GNU
sed
, a nova linha na substituição no últimos
comando acima pode ser expressa como\n
em vez de\
seguida por uma nova linha literal.Se não fosse pelo
'...'
invés de"..."
e esse@as
prefixo para listas vazias, isso seria uma matriz JSON válida, então você também poderia fazer:Observe que nenhum deles funciona para matrizes arbitrárias de strings, pois não levam em consideração o escape que pode ser feito, conforme
gsettings
evidenciado por:(onde podemos até vê-lo mudando para
"..."
no último caso em que o valor da string contém um'
, tornando-o uma string JSON adequada nesse caso).O formato parece ser o descrito em https://developer-old.gnome.org/glib/stable/gvariant-text.html
O
JSON:PP
perl
módulo suporta strings JSON usando delimitadores de aspas simples, então você pode usá-lo para extrair e decodificar qualquer string com aspas simples ou duplas em qualquer objeto GVariant com algo como:Onde o regexp encontra pares de
'...'
ou"..."
(permitindo aspas de escape ou barras invertidas dentro), que são passados para o decodificador JSON. Ignorando osb'...'
,b"..."
bytestrings nos quais JSON:PP iria engasgar como AFAICT,gsettings
os gera como[byte 0xHH, 0xHH...]
em vez disso.Usando GNU grep para
-o
e assumindo que suas strings entre aspas não contêm nenhum dos caracteres][ ,'
ou nova linha:caso contrário, usando qualquer awk e permitindo quaisquer caracteres, exceto
'
ou nova linha nas strings entre aspas: