linux - awk/sed : find string and return its previous index

标签 linux bash awk sed

我正在尝试使用 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/

相关文章:

java - 如何修复在 Docker 中运行的 Azure Cosmos 模拟器 (Linux) 中偶发的读取超时和服务不可用错误?

c++ - 在 Linux 上用 C++ 显示二维图像的简单库

bash -x 命令

linux - 有没有一种有效的方法可以用 _ 替换文件名中的空格? (数千个文件)

regex - 替换字符串之间的文本(例如使用 sed)

linux - 与 :linked_dirs 一起使用时,使用 Amazon EFS(绑定(bind)安装文件夹)的 Capistrano 部署失败

linux - 如何捕获已将其重定向到/dev/null 的正在运行的进程的标准输出

linux - 一次性编辑linux子目录下所有相似文件

bash - 修复 shell 脚本以增加 semversion

linux - 如何从 shell bash 中的文本文件中提取模式