2017-01-27 3 views
0

그래서 "수화기"및 "유선 헤드셋"과 같은 일치하는 싱크대 내의 "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; 
관련 문제