2017-01-27 7 views
0

だから、 "Earpiece"や "Wired Headset"のような特定のシンク内の "deep_buffer"ソースを削除しようとしています。間に改行がある場合、どうすればいいですか?私は2つの方法を探しています。最初に、除外を一致させ、残りの部分にパッチを当てたり、上記のようなものだけをパッチする(マッチから)。私はアンドロイドでposixシェルを使用しています。Sedが2行以上のマッチを取り除く

オリジナルコード:

<routes> 
    <route type="mix" sink="Earpiece" 
      sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
    <route type="mix" sink="Speaker" 
      sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
    <route type="mix" sink="Wired Headset" 
      sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
    <route type="mix" sink="Wired Headphones" 
      sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
    <route type="mix" sink="Line" 
      sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
    <route type="mix" sink="HDMI" 
      sources="primary output,raw,deep_buffer,multichannel,direct_pcm,compressed_offload"/> 
    <route type="mix" sink="Proxy" 
      sources="primary output,raw,deep_buffer,multichannel,direct_pcm,compressed_offload"/> 
    <route type="mix" sink="FM" 
      sources="primary output"/> 
    <route type="mix" sink="BT SCO All" 
      sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
    <route type="mix" sink="Telephony Tx" 
      sources="voice_tx"/> 
    <route type="mix" sink="primary input" 
      sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx"/> 
    <route type="mix" sink="surround_sound" 
      sources="Built-In Mic,Built-In Back Mic"/> 
    <route type="mix" sink="record_24" 
      sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/> 
    <route type="mix" sink="voice_rx" 
      sources="Telephony Rx"/> 
</routes> 

の予想される出力は、 "有線ヘッドフォン" と以下のような "有線ヘッドセット"(しかマッチしたもの)のようなマッチしたシンクからdeep_bufferを削除します:

<routes> 
     <route type="mix" sink="Earpiece" 
       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
     <route type="mix" sink="Speaker" 
       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
     <route type="mix" sink="Wired Headset" 
       sources="primary output,raw,direct_pcm,compressed_offload,voip_rx"/> 
     <route type="mix" sink="Wired Headphones" 
       sources="primary output,raw,direct_pcm,compressed_offload,voip_rx"/> 
     <route type="mix" sink="Line" 
       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
     <route type="mix" sink="HDMI" 
       sources="primary output,raw,deep_buffer,multichannel,direct_pcm,compressed_offload"/> 
     <route type="mix" sink="Proxy" 
       sources="primary output,raw,deep_buffer,multichannel,direct_pcm,compressed_offload"/> 
     <route type="mix" sink="FM" 
       sources="primary output"/> 
     <route type="mix" sink="BT SCO All" 
       sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/> 
     <route type="mix" sink="Telephony Tx" 
       sources="voice_tx"/> 
     <route type="mix" sink="primary input" 
       sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx"/> 
     <route type="mix" sink="surround_sound" 
       sources="Built-In Mic,Built-In Back Mic"/> 
     <route type="mix" sink="record_24" 
       sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/> 
     <route type="mix" sink="voice_rx" 
       sources="Telephony Rx"/> 
    </routes> 
+0

期待される出力はどれですか/ – Inian

+0

オリジナルの質問が更新されました。 –

答えて

1

Iこれがあなたの望むものなのかどうかは分かりませんが、ここでは "Earpiece"と "Wired Headset"という文字列を含む行に続く文字列 "deep-buffer"を削除する、すばやく汚れたPerlプログラムがあります。私はそれを書くようにして、そのロジックが簡単に続くようにしました。

#!/usr/bin/perl 

$flag = "0"; 
while (<>) { 
    if ($flag eq "1") 
    { 
     s/deep_buffer,//g; 
     $flag = "0"; 
    } 
    elsif (/"Earpiece"/ || /"Wired Headset"/) 
    { 
     $flag = "1"; 
    } 
    print; 
} 
exit; 
関連する問題