如何将第一个sed的输出用作第二个sed的输入


<acdb_ids>
<device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
<device name="SND_DEVICE_OUT_SPEAKER_REVERSE" acdb_id="15"/>
<!-- add by lifei for A2DP Dirac audio effect 20170413-->
<device name="SND_DEVICE_OUT_BT_A2DP" acdb_id="10"/>
<!-- add by lifei end-->
<device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="124"/>
<device name="SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE" acdb_id="131"/>
<device name="SND_DEVICE_IN_VOICE_REC_TMIC" acdb_id="131"/>
<device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" acdb_id="132"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" acdb_id="150"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" acdb_id="150"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" acdb_id="151"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" acdb_id="152"/>
<device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC" acdb_id="133"/>
<device name="SND_DEVICE_IN_UNPROCESSED_MIC" acdb_id="143"/>
<device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" acdb_id="144"/>
<device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
<device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
<!-- #ifdef VENDOR_EDIT -->
<!-- aditya.gunda@Multimedia, 2019/10/16, EIDQ-5951, fix low volume issue -->
<device name="SND_DEVICE_IN_HANDSET_MIC_REC_SINGLE" acdb_id="4"/>
<!-- #endif -->
</acdb_ids>
<bit_width_configs>
<device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" bit_width="24"/>
</bit_width_configs>

这些行位于audio_platform_info.xml中,所以我要做的是从读取所有设备名称并将它们附加到下面是脚本执行后的预期输出。

<acdb_ids>
<device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
<device name="SND_DEVICE_OUT_SPEAKER_REVERSE" acdb_id="15"/>
<!-- add by lifei for A2DP Dirac audio effect 20170413-->
<device name="SND_DEVICE_OUT_BT_A2DP" acdb_id="10"/>
<!-- add by lifei end-->
<device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="124"/>
<device name="SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE" acdb_id="131"/>
<device name="SND_DEVICE_IN_VOICE_REC_TMIC" acdb_id="131"/>
<device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" acdb_id="132"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" acdb_id="150"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" acdb_id="150"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" acdb_id="151"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" acdb_id="152"/>
<device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC" acdb_id="133"/>
<device name="SND_DEVICE_IN_UNPROCESSED_MIC" acdb_id="143"/>
<device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" acdb_id="144"/>
<device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
<device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
<!-- #ifdef VENDOR_EDIT -->
<!-- aditya.gunda@Multimedia, 2019/10/16, EIDQ-5951, fix low volume issue -->
<device name="SND_DEVICE_IN_HANDSET_MIC_REC_SINGLE" acdb_id="4"/>
<!-- #endif -->
</acdb_ids>
<bit_width_configs>
<device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
<device name="SND_DEVICE_OUT_SPEAKER_REVERSE" bit_width="24"/>
<device name="SND_DEVICE_OUT_BT_A2DP" bit_width="24"/>
<device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" bit_width="24"/>
<device name="SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE" bit_width="24"/>
<device name="SND_DEVICE_IN_VOICE_REC_TMIC" bit_width="24"/>
<device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" bit_width="24"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" bit_width="24"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" bit_width="24"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" bit_width="24"/>
<device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" bit_width="24"/>
<device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC" bit_width="24"/>
<device name="SND_DEVICE_IN_UNPROCESSED_MIC" bit_width="24"/>
<device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" bit_width="24"/>
<device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" bit_width="24"/>
<device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" bit_width="24"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" bit_width="24"/>
<device name="SND_DEVICE_IN_HANDSET_MIC_REC_SINGLE" bit_width="24"/>
</bit_width_configs>

所以我的问题是如何将这些输出从第一个sed命令附加到

这可能适合您(GNU sed):

sed -En '/<acdb_ids>/{:a;n;/<device/{s/ acdb.*//;H};/</acdb_ids/!ba;H;x;x}
/<bit_width_configs/!b;p;n
s/.* //;G;:b;s/^([^n]*)(.*)"n/12 1n/;tb
s/^.*nn(.*)n.*/1/p;n;p;q' file

总览:保存设备信息,打印bit_width_configs的开始标签,将bit_width的详细信息附加到详细行,并将其与结束标签一起打印,退出。

打开扩展regexp并关闭隐式打印-En

匹配打开acdb_ids标签和过滤设备信息(少acdb_id标签)到保持空间

匹配bit_width_configs开头标记,打印出来

获取下一行并附加详细信息。

bit_width附加到每个细节行。

删除任何人工制品并打印所有细节。

获取并打印结束的bit_width_configs标签。

放弃处理。

sed -Ei '/<acdb_ids>/{:a;n;p;/<device/{s/ acdb.*//;H};/</acdb_ids/!ba;H;x;x}
/<bit_width_configs/!b;n;p
s/.* //;G;:b;s/^([^n]*)(.*)"n/12" 1n/;tb
s/^.*nn(.*)n.*/1/p' audio_platform_info.xml
sed -Ei '/<bit_width_configs>/,/</bit_width_configs>/{G;/^([^n]*). (n.*)*n1(n|$)/!{P;h};d}' audio_platform_info.xml
sed -i 's/<device name=".*"$/
/g;/^$/!P;D;g' audio_platform_info.xml
sed -i '/^[[:space:]]*$/d' audio_platform_info.xml

现在这是我对这个问题的解决方案,直到我或别人有一个更好的解决方案。其中,sed -Ei '/<bit_width_configs>/,/</bit_width_configs>/{G;/^([^n]*)(n.*)*n1(n|$)/!{P;h};d}' audio_platform_info.xml奇怪,因为sed在busybox中不同。

相关内容