2016-03-19 43 views
1

と仮定我々持って、次のコマンドとその関連出力:BASHに特定の文字で区切られた文字列を使用してファイルを作成します

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

出力:私はスクリプトでgsettingsコマンドを使用する必要が

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

gessetingsコマンドの出力に関するファイル名を作成します。

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

:たとえば、ファイル名が

b1dcc9dd-5262-4d8d-a863-c897e6d979b9

次のいずれかである必要があります

など。

どうすればいいですか?

答えて

0
あなたのgsettings出力を読み込み、配列に格納するために、プロセス置換を使用することができます

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

別の解決策...ちょうどパイプへのごコマンドの出力:

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

することができますあなたのsedコマンドを早期に終了するように変更し、OPは '| head -1': 'sed" s/['] // g; 1q "'となります。 '' [''を ''に置き換えるには、文字クラスの先頭に追加するだけです: 'sed 's/[] ['] // g; 1q" 'これはOPパイプのgsettingをsedに直接行かせます。 – andlrc

+0

@ dev-null:あなたは100%正しいです。あなたの提案に応じてOPに彼の最初のcmdを変更させる – mauro

関連する問題