传递给sed时解析字符串错误丢失命令

时间:2016-10-09 02:27:49

标签: regex bash sed

有人可以解释如何将变量正确传递到sed并仅返回881 747吗?我试过了:

coords=$(xdotool getmouselocation) #x:881 y:747 screen:0 window:56623110
echo $(coords)|sed '/[[:digit:]]/'

由于一些原因失败了(我无法弄清楚如何修复):

  1. 我没有正确地将事情传递给sed
  2. 我的正则表达式不正确。我也尝试过:/:[0-9]+\sy:[0-9]+/失败甚至更糟。我是否必须运行sed两次,一次获取x值,一次获得y值?

2 个答案:

答案 0 :(得分:1)

这应该按照你的要求做。

coords="x:881 y:747 screen:0 window:56623110"
echo ${coords//:/} | sed 's/[[:alpha:]]//g' | awk '{print $1,$2}'

881 747 #output

要打破它:

  • echo ${coords//:/}正在使用bash字符串替换从输出字符串中删除:的所有实例。

  • sed 's/[[:alpha:]]//g'从输出中删除所有[[:alpha:]]个字符。

  • awk '{print $1,$2}'打印前两个字段;在这种情况下881 747

答案 1 :(得分:1)

只能使用awk(不需要使用sed)来完成。

coords="x:881 y:747 screen:0 window:56623110"
echo $coords | awk -F "[: ]" '{print $2,$4;}'

输出:

881 747