2016-04-09 9 views
-1

Ich möchte alle Gebietsschema-Namen aus der Datei /etc/locale.gen ohne Duplikate auflisten. Ich weiß nicht wirklich, wie ich es machen soll.Geben Sie das Gebietsschema ohne Duplikate an

Ich habe begonnen, den Anfang der Datei zu entfernen, wie so:

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

Er druckt mir alle Zeilen. Und ich mag die Ausgabe haben, wie so:

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

Ohne die # und ohne den Rest von dem, was zum Beispiel nach fr_FR ist. In einem einzigen Befehl.

EDIT 1:

ich etwas mit grep gefunden haben:

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

EDIT 2:

hier ist die Datei http://pastebin.com/i227sTV2

+1

Dieser Pastebin-Link funktioniert nicht. Selbst wenn es (jetzt) ​​wäre, sollte die Frage * hier * vollständig sein, d. H. Sie sollte alle Informationen enthalten, die erforderlich sind, um sie zu beantworten. –

+0

Nun, die Datei enthält mehr als 200 Zeilen, also ... Ich werde versuchen, die Datei zu ändern –

+0

Der Punkt ist, einen repräsentativen Auszug dieser Datei zu erstellen, um es als Teil der Frage zu zeigen, siehe [MCVE]. Sie brauchen nicht mehr als ein paar Zeilen, um zu zeigen, was Sie erreichen möchten. –

Antwort

1

Dies sollte es tun:

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

Die "[. @]" Entfernt alle nach language_country (en_US).


Eine Quelle locale.gen Datei ist packaged by debian here (als ein Beispiel der Datei sollten Sie haben, nicht den Befehl oben laufen erforderlich). Eine vollständige Liste der Ländereinstellungen befindet sich in der extrahierten (aus der komprimierten deb-Datei) Datei /locales_2.22-5_all/usr/share/i18n/SUPPORTED (sie enthält 281 eindeutige Gebietsschema-Namen).

Aktualisiert: s/gsub/sub/g sollte auf jedem awk laufen.

+0

Es zeigt die '#', die ich nicht in der gewünschten Ausgabe erhalten würde. Auch es sortiert sie nicht, noch entfernt es Duplikate –

+0

Es funktioniert fast, muss nur die # am Anfang entfernen. –

+0

@Gradiuss Das 'sub' entfernt die' # '. Ich habe es geändert, um * optionale * Leerzeichen zu akzeptieren. Sortierung hinzugefügt. Sortierung in awk ist nicht "ein Liner". –

1

Vielleicht so etwas wie dieses:

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

(oder das gleiche ohne die @)

+0

Danke, dass du deinem Freund geholfen hast. Leider war die Ausgabe nicht das, was ich erwartet hatte. Ich brauche alle Gebietsnamen, nicht nur FR-Namen. –

+0

@Gradiuss: Veröffentlichen Sie einen Auszug Ihrer Datei in Ihrer Frage (ich habe diese nicht auf meinem System) –

+0

Ich habe es geschafft mit 'awk -F [.] '' {Print $ 1} '/ etc/locale.gen | awk '{print $ 1}' | sed 's/# // g' | sortieren | uniq' aber gibt es keinen Weg es mit vollem awk zu machen? –

Verwandte Themen