bash:带有命令结果的内联子字符串选择

时间:2017-03-19 13:41:27

标签: bash substring

目前我有;分开的这两个命令:

ID=$(wmctrl -d | grep "\* DG"); kdialog --msgbox "D = ${ID:(-1)}"

是否可以绕过辅助变量ID的创建,但仍然使用子串索引(此处使用负索引从后面计数)?

我正在寻找XXX"D = ${XXX:(-1)}"的替代品。我目前的所有尝试都导致了糟糕的替代"错误。

注意:原始命令(如下)有一些缺陷,其中一些评论涉及:

export ID=$(wmctrl -d | egrep "\* DG"); kdialog --msgbox "D = ${ID:(-1)}"

1 个答案:

答案 0 :(得分:1)

一个明显的解决方法是使用sed代替egrep

kdialog --msgbox "D = $(wmctrl -d | sed -n 's/.*\* DG.*\(.\)$/\1/p')"

这里的逻辑是默认不打印任何行(-n);然后在匹配正则表达式的行上,用整个行替换最后一个字符,并在匹配和后续替换(/p)时打印。