Добавить в конец строки с помощью sed

Ненавижу это делать, но ответ (после дополнительных исследований):

 getfattr -d -m - file

Я явно пропустил это при чтении страницы руководства :

-m шаблон , - match = шаблон

Включают только атрибуты с именами, соответствующими шаблону регулярного выражения . [...] Укажите "-" для включения всех атрибутов.

2
04.07.2017, 16:27
2 ответа

Вам действительно не нужен 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принимает буквенные символы.

8
27.01.2020, 21:48

Вы делаете две вещи с sedздесь:

  1. замена всех точек косой чертой и
  2. добавление косой черты в конец строки

Первая задача может быть выполнена командой sedy#.#/#.Команда 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"
1
27.01.2020, 21:48

Теги

Похожие вопросы