Sed - строковая замена с группировками

Создайте файл /etc/vnc/xstartup со следующим содержанием:

#!/bin/bash
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

И дайте ему полномочия чтения и выполнения всем пользователям:

chmod 0755 /etc/vnc/xstartup

Затем этот сценарий будет выполняться vnc сервером любого пользователя

2
25.01.2014, 07:00
3 ответа

Можно переместить группирующиеся круглые скобки в представленных круглых скобках. Это сделало бы:

ls | sed -nre 's/.*-\(([A-Z]{3,4}[0-9]{3,4})\)-.*/\1 \t \0/p'|sort

Я также использую -r для regexp легче записать скобки и круглые скобки.

При использовании этой опции группирующиеся круглые скобки (,), и фактические круглые скобки \(,\)

1
27.01.2020, 22:01
  • 1
    -r только для GNU sed. Некоторые BSDs имеют a -E опция. Generally/POSIXly, sed только поддерживает основные регулярные выражения. –  Stéphane Chazelas 25.01.2014, 11:35
  • 2
    Это ответило на вопрос (и объяснил это также). Если я хотел к чему-нибудь между тем шаблоном, мог я просто иметь что-то как -\((*)\)-? –  KG87 25.01.2014, 18:01
  • 3
    делает Вы имеете в виду -\((.*)\)- ? Так или иначе, sed команда распечатает целую строку, вот почему она должна заменить целую строку тем, что необходимо распечатать. Поэтому .* вначале и конец необходим. –  ptantiku 26.01.2014, 10:29
ls | LC_ALL=C sed -n 's/.*-(\([A-Z]\{3,4\}[0-9]\{3,4\}\))-.*/\1 &/p'

Но если это только для сортировки, возможно, Вы можете только к:

ls | sort -t'(' -k2
2
27.01.2020, 22:01

Первый подход предварительно ожидает строку сортировки к каждому имени файла:

$ ls -1 | awk -F\( '{print $2 " "$1"("$2}' | sed 's/)-clean//' | sort -n
FOL001 iemeezei-(FOL001)-clean
FOL002 aghaitug-(FOL002)-clean
FOL003 ieghaeve-(FOL003)-clean

Второй, который я люблю лучше, потому что имя файла остается таким же. Это добавляет пространство к строке "FOL", которая может затем используемый sort как разделитель, второе sed удаляет пространство снова. Если имена файлов содержат расположенный с интервалами, Вы могли бы хотеть решить для другого разделителя (который затем имеет к данному к sort с -t):

$ ls -1 | sed 's/(FOL/& /' | sort -nk2 | sed 's/FOL /FOL/'
iemeezei-(FOL001)-clean
aghaitug-(FOL002)-clean
ieghaeve-(FOL003)-clean
1
27.01.2020, 22:01

Теги

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