我正在尝试使用 awk 获取基于查询的索引。
如果命令 (pacmd list-sink-inputs) 返回正在播放的音频列表:
2 sink input(s) available. index: 19 driver: <protocol-native.c> flags: START_CORKED state: RUNNING ... (undetermined number of lines) ... sink: 0 <alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.analog-stereo> volume: front-left: 45875 / 70% / -9.29 dB, front-right: 45875 / 70% / -9.29 dB balance 0.00 module: 8 client: 713 properties: application.icon_name = "chromium-browser" application.language = "C" ... (undetermined number of lines) ... index: 20 driver: <sound-file-stream.c> flags: state: RUNNING sink: 0 <alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.analog-stereo> volume: front-left: 9830 / 15% / -49.44 dB, front-right: 9830 / 15% / -49.44 dB balance 0.00 muted: no resample method: speex-float-1 properties: media.name = "audio.wav" media.filename = "/usr/local/sounds/audio.wav" media.format = "WAV (Microsoft)" module-stream-restore.id = "sink-input-by-media-name:audio.wav"
我知道如何获取每个索引,方法是: pacmd list-sink-inputs | awk '$1 == "索引:"{print $2}'
回应:
19 20
但我需要的只是仅在“chromium-browser”中播放的音频的索引。
希望得到的答复:
19
可以使用 awk 或 sed 吗?查询会是什么? 谢谢
最佳答案
您可以将命令传送到以下 GNU sed
命令中:
sed -En '/^\s*index:/h;/application\.icon_name = "chromium-browser"/{x;s/index: //;p;q}'
这会将 sed 遇到的每个索引行存储到其保存缓冲区中,然后当它到达“chromium-browser”行时,它会交换保存缓冲区的内容,从该行中提取索引,打印它然后退出。
您可以try it here .
关于linux - awk/sed : find string and return its previous index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60396236/