2016-04-09 5 views
-1

Я хотел бы перечислить все имена локалей из файла /etc/locale.gen без дубликатов. Я не знаю, как это сделать.Список локалей без дубликатов

Я начал удаление верхней части файла следующим образом:

sed -n -e '/aa_DJ/,$p' /etc/locale.gen 

Он печатает мне всю линию. И я хотел бы иметь выход так:

[...] 
fr_FR 
en_US 
en_GB 
[...] 

без # и без остальных то, что после того, как fr_FR, например. В одной команде.

EDIT 1:

я, возможно, нашли что-то с Grep:

sed -n -e '/aa_DJ/,$p' /etc/locale.gen | grep {,1} 

EDIT 2:

Вот файл http://pastebin.com/i227sTV2

+1

Это не работает. Даже если бы это произошло (на данный момент), вопрос должен быть полным * здесь *, т. Е. Содержать всю информацию, необходимую для ответа на него. –

+0

ну, файл содержит более 200 строк, поэтому ... Я попытаюсь изменить файл –

+0

Суть заключается в создании репрезентативной выдержки из этого файла, чтобы показать ее как часть вопроса, см. [Mcve]. Вам не нужно больше нескольких строк, чтобы показать, чего вы хотите достичь. –

ответ

1

Это следует сделать это:

awk -F "[ [email protected]]" '/_|eo|ia/{sub("^# *",""); print $1}' /etc/locale.gen | sort -u 

экран "[. @]" Удаляет все после language_country (en_US).


Файл источника locale.gen является packaged by debian here (как пример файла, который вы должны иметь, не требуется, чтобы выполнить команду выше). Полный список локалей находится в извлеченном файле (из файла сжатого deb) /locales_2.22-5_all/usr/share/i18n/SUPPORTED (он содержит 281 уникальное имя локали).

Обновлено: s/gsub/sub/g должно работать на любом awk.

+0

Он отображает '#', который я бы не получил в желаемом выходе. Также он не сортирует их и не удаляет дубликаты. –

+0

Он почти работает, просто нужно удалить # в начале. –

+0

@Gradiuss 'sub' удаляет' # '. Я изменил его, чтобы принять * необязательные * пробелы. Добавлен сортировка. Сортировка внутри awk не является «одним лайнером». –

1

Возможно, что-то вроде этого:

awk -F'[@. ]' '$1!="#"{sub(/^#/,"");print $1}' /etc/locale.gen | uniq 

(или же без @)

+0

Спасибо, что помогли другу. К сожалению, выход был не тем, что я ожидал. Мне нужны все имена локалей, а не только FR. –

+0

@Gradiuss: разместите отрывок вашего файла в своем вопросе (у меня его нет в моей системе) –

+0

Мне удалось сделать это с помощью 'awk -F '[.]' '{Print $ 1}'/etc/locale.gen | awk '{print $ 1}' | sed 's/# // g' | сортировать | uniq', но не существует способа сделать это с полным awk? –

Смежные вопросы