我有这样的数据:
['/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/']
我希望每个值每行一个不带引号的值(以便我可以将其传送到另一个命令),例如:
/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/
/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/
....
awk -F'[][]' '{print $2}'
删除方括号。我不明白如何进一步进行。
您可以删除前导
['
、尾随并用换行符']
替换所有内容,然后删除我看到的用于表示空字符串列表的或行(其中前缀指定该数组是一个字符串数组)。', '
[]
@as []
gsettings
@as
a
s
使用 GNU
sed
,上面最后一个命令中替换中的换行符s
可以表示为\n
而不是\
后面跟着文字换行符。如果不是空列表的
'...'
替代"..."
和那个@as
前缀,那将是一个有效的 JSON 数组,所以你也可以这样做:gsettings
请注意,这些都不适用于任意字符串数组,因为它们没有考虑可以通过以下方式完成的转义:(我们甚至可以看到它切换到
"..."
最后一种情况,其中字符串值包含 a'
,在这种情况下使其成为正确的 JSON 字符串)。该格式似乎是https://developer-old.gnome.org/glib/stable/gvariant-text.html中描述的格式
该
JSON:PP
perl
模块支持使用单引号分隔符的 JSON 字符串,因此您可以使用它来提取和解码任何 GVariant 对象中的任何单引号或双引号字符串,如下所示:正则表达式找到一对
'...'
或"..."
(允许内部转义引号或反斜杠),并将其传递给 JSON 解码器。忽略JSON:PP 会阻塞为 AFAICT 的 , 字节串,b'...'
将其输出为。b"..."
gsettings
[byte 0xHH, 0xHH...]
使用 GNU grep
-o
并假设引用的字符串不包含任何字符][ ,'
或换行符:否则使用任何 awk 并允许
'
在引用的字符串中使用除换行符之外的任何字符: