android - 如何获取第一个 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> 中读取所有设备名称并将它们附加到 <bit_width_configs> 上。下面表示脚本执行后的预期输出。
<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 命令附加到 <bit_width_configs> 上。
解决方案
这可能对您有用(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/\1\2 \1\n/;tb
s/^.*\n\n(.*)\n.*/\1/p;n;p;q' file
概述:保存设备信息,打印开始标签bit_width_configs
,将 bit_width 详细信息附加到详细信息行,打印它们和结束标签并退出。
打开扩展正则表达式并关闭隐式打印-En
。
acdb_ids
将开始标签和过滤设备信息(较少标签)匹配acdb_id
到保留空间中。
匹配开始bit_width_configs
标签,打印。
获取下一行并附加详细信息。
将 附加bit_width
到每个详细信息行。
移除任何人工制品并打印所有细节。
获取并打印结束bit_width_configs
标签。
退出处理。
推荐阅读
- java - 如何使用 Jackson 基于 JSON 值查找 getter 方法
- npm - 为多个助手和不同对等依赖项设计 npm 包
- android - 收到 FCM 前台通知,但单击时未打开应用程序
- jenkins - 我可以让 Jenkins 舞台视图结果行显示超过 10 行吗
- javascript - 通过 Express API 中的图形删除 Azure AD 中的用户
- python - Python:在包含区间的列表中查找字符串,并用其中的每个数字替换该区间
- react-native - 尝试附加不是 RNScreen 类型的子项
- python - 没有使用 Python 将文本发送到输入框
- google-sheets-api - 如何增加每个用户限制的每分钟查询次数?
- javascript - jquery如何触发带有附加参数的点击事件?