Ненавижу это делать, но ответ (после дополнительных исследований):
getfattr -d -m - file
Я явно пропустил это при чтении страницы руководства :
-m шаблон , - match = шаблон
Включают только атрибуты с именами, соответствующими шаблону регулярного выражения . [...] Укажите "-" для включения всех атрибутов.
Вам действительно не нужен sed для этого, если вы используете bash.
s="org.gnome.Terminal.Legacy.Keybindings"
g=${s//.//}/
Прочтите раздел Parameter Expansion справочной страницы bash (${parameter/pattern/string}
), там также есть много других полезных вещей.
С помощью sed вы также можете указать несколько выражений, иногда это более читабельно.
s="org.gnome.Terminal.Legacy.Keybindings"
g=$(sed -e 'y,.,/,' -e 's,$,/,' <<<$s)
Обратите внимание, что с командой y
вам не нужно экранировать команду .
, y
принимает буквенные символы.
Вы делаете две вещи с sed
здесь:
Первая задача может быть выполнена командой sed
y#.#/#
.Команда y
аналогична работе утилиты tr
тем, что она заменяет символы из одной строки на другую без использования регулярных выражений. Три #
являются разделителями для команды (, она обычно использует /
, как и в y/A-Z/a-z/
для строчных букв всех символов в диапазоне A-Z
), но, как и в случае с командой s
, мы может использовать любой разделитель, который мы хотим.
Вторую задачу можно решить, заменив конец строки косой чертой с помощью s#$#/#
.
Сложив их вместе, мы получим
sed -e 'y#.#/#' -e 's#$#/#'
В вашем скрипте:
#!/bin/bash
s='org.gnome.Terminal.Legacy.Keybindings'
g=$( sed -e 'y#.#/#' -e 's#$#/#' <<<"$s" )
printf '%s\n' "$g"
Получается
org/gnome/Terminal/Legacy/Keybindings/
Конечно, косая черта может быть поставлена с помощью printf
и замена точек косой чертой может быть сделана также с помощью tr
:
#!/bin/bash
s='org.gnome.Terminal.Legacy.Keybindings'
g=$( tr '.' '/' <<<"$s" )
printf '%s/\n' "$g"