2016-10-09 6 views
0

sedに正しく変数を渡して881 747だけを返す方法を説明できますか?私が試した:sedに渡すときに文字列エラーが見つかりません

(私は修正する方法を見つけ出すことができますどちらも)いくつかの理由のために失敗した
coords=$(xdotool getmouselocation) #x:881 y:747 screen:0 window:56623110 
echo $(coords)|sed '/[[:digit:]]/' 

を:

  1. 私が正しく
  2. 私の正規表現が間違っているsedに物事を渡しておりません。私も試した:/:[0-9]+\sy:[0-9]+/さらに悪くなった。私はsedを2回、x値を得るために1回、y値を得るために1回実行する必要がありますか?
+0

出力は、コードの最初の行の後のコメントです。もっと明白にするために何かすべきか? – Rilcon42

答えて

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}'は最初の2つのフィールドを出力します。この場合881 747

1

にそれが唯一のawk(SED使用する必要)を使用していない行うことができます。

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

出力:coords` `から

881 747 
関連する問題