首页 > 解决方案 > 如何使用特定模式修剪 shell 脚本中的字符串?

问题描述

大家还好吗?

因此,如果我运行xdotool getactivewindow getwindowname,它会给出当前窗口的完整标题,例如:

fish home/kibe/Documents — Konsole

Blablablabla - Stack Overflow - Google Chrome

问题是,我只想要应用程序名称(KonsoleGoogle Chrome)。

我可以很容易地在 Python 中做到这一点,例如:

def getAppTitle (fullStr):
    lastDashIndex = None
    for i in range(len(fullStr)):
        if fullStr[i] == '-' or fullStr[i] == '—':
            lastDashIndex = i
    return fullStr[lastDashIndex+2:] if lastDashIndex else fullStr

print(getAppTitle('blablabla - blablabla - ApplicationName'))
# returns ApplicationName

我一直在尝试在 shell 脚本中做同样的事情,但我一辈子都做不到。此外,由于某些原因,某些应用程序使用“-”(普通破折号)而其他应用程序使用“-”(破折号)。

我怎么能在shell中做到这一点?

标签: bashshell

解决方案


您必须使用这个 'em dash' 或 dash 作为字段分隔符并打印最后一个字段:

xdotool getactivewindow getwindowname | awk -F"—|-" '{print $NF}'

我不确定这个“破折号”是从哪里来的,我不得不为上面的命令复制粘贴它。


也许更好的是,使用两个字符作为 FS,任何破折号和一个空格,以与您的脚本相同,并修剪空格。

xdotool getactivewindow getwindowname | awk -F"— |- " '{print $NF}'

推荐阅读