다음과 같은 데이터가 있습니다.
['/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}'
대괄호를 제거하세요. 더 이상 진행하는 방법을 이해하지 못합니다.
답변1
선행 ['
, 후행을 제거 ']
하고 ', '
모든 것을 줄 바꿈으로 바꾼 다음 []
빈 문자열 목록을 나타내는 데 사용되는 또는 행을 제거할 수 있습니다(접두사는 배열이 문자열 배열임을 지정함).@as []
gsettings
@as
a
s
gsettings get some-path some-array-key... |
sed "/^@as \[\]\$/d
/^\[\]\$/d
s/^\['//
s/'\]\$//
s/', '/\\
/g"
GNU를 사용하면 sed
위의 마지막 명령에서 대체된 개행 문자는 리터럴 개행 문자가 뒤에 오는 대신 다음 s
과 같이 표현될 수 있습니다 .\n
\
빈 목록 과 해당 접두사 '...'
대신 유효한 JSON 배열이 되면 다음과 같이 할 수도 있습니다."..."
@as
gsettings get some-path some-array-key |
sed "y/'/\"/; s/^@as //" |
jq -r '.[]'
gsettings
다음과 같이 수행할 수 있는 이스케이프를 고려하지 않기 때문에 이들 중 어느 것도 임의의 문자열 배열에서 작동하지 않습니다.
$ gsettings list-recursively | grep '\\'
org.freedesktop.ibus.panel.emoji favorites ['\u200b']
org.gnome.evolution.shell filename-illegal-chars "'\"&`();|<>$%{}!"
"..."
( 문자열 값에 가 포함된 마지막 사례 로 전환되어 '
이 경우 적절한 JSON 문자열이 되는 것을 볼 수도 있습니다 ).
$ gsettings set org.gnome.seahorse last-search-text $'\1\xa\U10FFFF\'\"\\'
$ gsettings get org.gnome.seahorse last-search-text
"\u0001\n\U0010ffff'\"\\"
형식은 설명의 형식인 것 같습니다.https://developer-old.gnome.org/glib/stable/gvariant-text.html
이 JSON:PP
perl
모듈은 작은따옴표 구분 기호를 사용하여 JSON 문자열을 지원하므로 다음과 같이 GVariant 개체에서 작은따옴표 또는 큰따옴표로 묶인 문자열을 추출하고 디코딩하는 데 사용할 수 있습니다.
gsettings any-path any-key |
perl -C -MJSON::PP -lne '
BEGIN{
$j = JSON::PP->new->allow_singlequote
}
print $j->decode($_) for
/'\''(?:\\.|[^\\'\''])*'\''|"(?:\\.|[^\\"])*"/g'
정규식은 '...'
OR "..."
(따옴표 또는 백슬래시의 내부 이스케이프 허용) 쌍을 찾아 이를 JSON 디코더에 전달합니다. JSON:PP를 무시하면 AFAICT, 바이트 문자열이 차단 b'...'
되고 .b"..."
gsettings
[byte 0xHH, 0xHH...]
답변2
GNU grep을 사용 -o
하고 인용된 문자열에 문자 ][ ,'
나 개행 문자가 포함되어 있지 않다고 가정합니다.
$ grep -Eo "[^][ ,']+" file
/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/
그렇지 않으면 awk를 사용하고 '
인용된 문자열에서 개행 문자를 제외한 모든 문자를 허용하십시오.
$ awk -F"'" '{for (i=2; i<NF; i+=2) print $i}' file
/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/