2017-08-18 9 views
-3

私は以下の各変数の{と}の間で以下にマッチするすべてのコードを見つけるためにsedを試していますが、含まれる検索を除外したい#を持つ行(行の任意の部分に存在する)。次に、sedスクリプトが、マッチした行を期待される出力の "ライブラリ"の下にコピーして、#を追加します。最初の行の名前の最後に、コピーするときに一致するたびにコピーされます。Sedマッチ/コピーしてposixシェルに入れてください

一致/コピーを見つけるためにオリジナルコード:

bundle { 
    path /system/lib/soundfx/libbundlewrapper.so 
    } 
    #positive { 
    #path /system/lib/soundfx/libpositive.so 
    #} 
    reverb { 
    path /system/lib/soundfx/libreverbwrapper.so 
    } 

予想される出力:

libraries { 
    bundle {# 
    path /system/lib/soundfx/libbundlewrapper.so 
    } 
    reverb {# 
    path /system/lib/soundfx/libreverbwrapper.so 
    } 
    proxy { 
    path /system/lib/soundfx/libeffectproxy.so 
    } 
    jdsp { 
    path /system/lib/soundfx/libjamesdsp.so 
    } 

その後、私は以下のと同じことをしたいが、私はまた、それを必要とするので、それはもっと複雑です以下の2つを一致させてコピーしてください(それらはすべて "ライブラリ"と "uuid"を持っていますが、一部にはhwとswしかありません)。

一致する/コピーするオリジナルコード:

jamesdsp { 
    library jdsp 
    uuid f27317f4-c984-4de6-9a90-545759495bf2 
    } 
    sa3d { 
    library proxy 
    uuid 1c91fca0-664a-11e4-b8c2-0002a5d5c51b 
     libsw { 
     library myspace 
     uuid 3462a6e0-655a-11e4-8b67-0002a5d5c51b 
     } 
     libhw { 
     library offload 
     uuid c7a84e61-eebe-4fcc-bc53-efcb841b4625 
     } 
    } 
    #downmix { 
    #library downmix 
    #uuid 93f04452-e4fe-41cc-91f9-e475b6d1d69f 
    #} 
visualizer { 
    library visualizer 
    uuid d069d9e0-8329-11df-9168-0002a5d5c51b 
    } 

予想される出力:

effects { 
     jamesdsp {# 
     library jdsp 
     uuid f27317f4-c984-4de6-9a90-545759495bf2 
     } 
     sa3d {# 
     library proxy 
     uuid 1c91fca0-664a-11e4-b8c2-0002a5d5c51b 
      libsw { 
      library myspace 
      uuid 3462a6e0-655a-11e4-8b67-0002a5d5c51b 
      } 
      libhw { 
      library offload 
      uuid c7a84e61-eebe-4fcc-bc53-efcb841b4625 
      } 
     } 
    visualizer {# 
     library visualizer 
     uuid d069d9e0-8329-11df-9168-0002a5d5c51b 
     } 
     dax { 
     library dax 
     uuid 9d4921da-8225-4f29-aefa-6e6f69726861 
     } 

心の中で上記のコードを保つには、 "効果{" の下に配置する必要があります。

+1

最初の例で 'proxy'と' jdsp'はどのように表示されましたか? – Beta

答えて

0

あなたのソースファイルはTcl構文を持っているので、Tclコード(appriopriate "unknown procedure"ハンドラを持っている)でそれらを実行すると、良い結果が得られます。私は

$ cat process.tcl 
rename unknown __tcl_unknown 
proc unknown {cmd body} { 
    puts "$cmd {#$body}" 
} 
lassign $argv filename prefix suffix 
puts $prefix 
source $filename 
puts $suffix 

次に "File1.datの" と "file2.dat" としての第2の

$ tclsh process.tcl file1.dat "libraries {" " proxy { 
    path /system/lib/soundfx/libeffectproxy.so 
    } 
    jdsp { 
    path /system/lib/soundfx/libjamesdsp.so 
    }" 
libraries { 
bundle {# 
    path /system/lib/soundfx/libbundlewrapper.so 
    } 
reverb {# 
    path /system/lib/soundfx/libreverbwrapper.so 
    } 
    proxy { 
    path /system/lib/soundfx/libeffectproxy.so 
    } 
    jdsp { 
    path /system/lib/soundfx/libjamesdsp.so 
    } 

$ tclsh process.tcl file2.dat "effects {" "  dax { 
     library dax 
     uuid 9d4921da-8225-4f29-aefa-6e6f69726861 
     }" 
effects { 
jamesdsp {# 
    library jdsp 
    uuid f27317f4-c984-4de6-9a90-545759495bf2 
    } 
sa3d {# 
    library proxy 
    uuid 1c91fca0-664a-11e4-b8c2-0002a5d5c51b 
     libsw { 
     library myspace 
     uuid 3462a6e0-655a-11e4-8b67-0002a5d5c51b 
     } 
     libhw { 
     library offload 
     uuid c7a84e61-eebe-4fcc-bc53-efcb841b4625 
     } 
    } 
visualizer {# 
    library visualizer 
    uuid d069d9e0-8329-11df-9168-0002a5d5c51b 
    } 
     dax { 
     library dax 
     uuid 9d4921da-8225-4f29-aefa-6e6f69726861 
     } 
としてあなたの最初のサンプルを持っています

あなたが欲しいインデントを与えません。それは契約破りですか?

+0

私はAndroidのposixシェルでこれを試してみます。インデントを維持する方法はありますか?これが私がsedを使用する理由です。これは私の好みの方法ではありません。 –

関連する問題