2016-03-19 32 views
1

varsayalım Elimizdeki Aşağıdaki komut ve ilgili çıkışı:BASH belirli bir karakter ayrılmış dizeleri kullanarak dosyaları oluşturma

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

Çıktı: Bir komut gsettings komutunu kullanmak gerekir

'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' 

ve çıkış komutları ile ilgili dosya adları oluşturun. Örneğin bir dosya adı olmalıdır

b1dcc9dd-5262-4d8d-A863-c897e6d979b9

sonraki:

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

vb.

Bunu nasıl yapabilirim?

cevap

0
Sen gsettings çıkışını okuyup Bir dizide saklamak süreç ikame kullanabilirsiniz

:

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

Başka bir çözüm ... Sadece sus için komutunuzun çıkışı:

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

yapabilirsiniz erken çıkmak için sed komutunu değiştirmek ve sonra OP kurtulmak olabilir. kafa -1': sed. s/['] // g; 1q "'. Ayrıca değiştirmek için:] ['karakter sınıfının önüne eklemeniz gerekiyor:' sed 's/[] ['] // g; 1q "' Bu, OP boru gsettings'ini doğrudan sed'e bırakacaktır. – andlrc

+0

@ dev-null:% 100 haklısınız. OP'nin ön cildine göre başlangıç ​​cmd'sini değiştirmesini sağlar. – mauro

İlgili konular