2016-03-19 4 views
1

Angenommen, haben wir den folgenden Befehl und die damit verbundene Ausgabe:Erstellen von Dateien mit Strings, die begrenzt durch bestimmte Zeichen in BASH

gsettings list-recursively org.gnome.Terminal.ProfilesList | head -n 1 | grep -oP '(?<=\[).*?(?=\])' 

Ausgang:

'b1dcc9dd-5262-4d8d-a863-c897e6d979b9', 'ca4b733c-53f2-4a7e-8a47-dce8de182546', '802e8bb8-1b78-4e1b-b97a-538d7e2f9c63', '892cd84f-9718-46ef-be06-eeda0a0550b1', '6a7d836f-b2e8-4a1e-87c9-e64e9692c8a8', '2b9e8848-0b4a-44c7-98c7-3a7e880e9b45', 'b23a4a62-3e25-40ae-844f-00fb1fc244d9' 

Ich brauche gsettings Befehl in einem Skript verwenden und Dateinamen für den Befehl Ausgabe von Gesessets erstellen. Zum Beispiel sollte ein Dateiname

sein

b1dcc9dd-5262-4d8d-A863-c897e6d979b9

die nächste:

ca4b733c-53f2-4a7e-8a47-dce8de182546

und so weiter.

Wie kann ich das tun?

Antwort

0

Sie Prozess-Substitution können Ihre gsettings Ausgang und speichern sie in einem Array zu lesen:

IFS=', ' read -r -a array < <(gsettings) 
for f in "${array[@]}" 
do 
    file=$(echo $f |tr -d "'") # removes leading and trailing quotes 
    touch "$file" 
done 
1

Eine andere Lösung ... nur die Ausgabe des Ihr Befehl:

your_command | sed "s/[ ']//g" | xargs -d, touch 
+0

Sie können Ändere deinen sed-Befehl, um früher zu beenden, und dann könnte OP '| Kopf -1': 'sed" s/['] // g; 1q "'. Um auch '] [' 'zu ersetzen, müssen Sie es nur an der Vorderseite der Zeichenklasse hinzufügen: 'sed" s/[] ['] // g; 1q "' Dadurch kann OP gsettings direkt an sed weiterleiten. – andlrc

+0

@ dev-null: Sie sind zu 100% richtig. Wird OP erlauben, seinen ursprünglichen cmd gemäß Ihrem Vorschlag zu ändern – mauro

Verwandte Themen