bash - 如何使用特定模式修剪 shell 脚本中的字符串?
问题描述
大家还好吗?
因此,如果我运行xdotool getactivewindow getwindowname
,它会给出当前窗口的完整标题,例如:
fish home/kibe/Documents — Konsole
Blablablabla - Stack Overflow - Google Chrome
问题是,我只想要应用程序名称(Konsole
和Google 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中做到这一点?
解决方案
您必须使用这个 'em dash' 或 dash 作为字段分隔符并打印最后一个字段:
xdotool getactivewindow getwindowname | awk -F"—|-" '{print $NF}'
我不确定这个“破折号”是从哪里来的,我不得不为上面的命令复制粘贴它。
也许更好的是,使用两个字符作为 FS,任何破折号和一个空格,以与您的脚本相同,并修剪空格。
xdotool getactivewindow getwindowname | awk -F"— |- " '{print $NF}'
推荐阅读
- python - 从 tkinter 按钮按下创建事件日志列表
- wordpress - 在 Wordpress 多站点的子站点文件夹中创建一个文件夹
- azure - Azure Logic App For Each 循环每次发送多封电子邮件只想发送一封电子邮件
- r - 按不同组划分 geom_col 很热?
- python - Python Panda 的行选择
- mysql - Mysql语法按百分比获取值
- reactjs - React 的公用文件夹和静态站点
- python - 子进程.Popen; FileNotFoundError:[WinError 2]。该系统找不到指定的文件
- c++ - 为什么这个函数在没有接收参数的情况下工作?
- python - 如何获得自 2016 年以来每个月的最后一个星期三?