2017-08-01 36 views
2

xdpyinfo | grep dimensions輸出是如何提取與sed的開始與圖案「(」

dimensions: 2560x1600 pixels (676x423 millimeters) 

配管它通過sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/')並提取像素(尺寸2560x1600),但不會與開口括號工作。

如何使用sed?得到milimiters尺寸(即646x423

+0

用反斜槓轉義括號。 –

回答

2

如果你想提取它在單個命令,然後你可以用這個gnu grep使用匹配復位正則表達式,即\K替換現有grep命令:

xdpyinfo | grep -oP 'dimensions:.*\(\K\d+x\d+' 

676x423 

上面會要求gnu grep。如果是不提供給你,那麼你可以使用這個grep與管道另一grep

xdpyinfo | grep -oE 'dimensions:.*\([0-9]+x[0-9]+' | grep -oE '[0-9]+x[0-9]+$' 

如果你必須使用sed,然後使用一個sed命令,因爲這與削減grep

xdpyinfo | sed -nE '/dimensions/{s/.*\(([0-9]+x[0-9]+).*/\1/p;q;}' 
+0

沒有安裝'ggrep',但第二個選項不輸出任何內容。 – nightcod3r

+0

對於'sed',我建議使用'xdpyinfo | sed -nE'/ dimensions/{s /.* \(([0-9] + x [0-9] +)。*/\ 1/p; q;}''並減少'grep' – anubhava

+1

Now你的更完整的目標是完整的問題。 – nightcod3r

2

您可以使用

sed -r 's/.*\(([0-9]+x[0-9]+).*/\1/' 

查看online demo

詳細

  • .* - 任何0+字符儘可能多的
  • \( - 文字((在POSIX ERE風味您使用的是帶有-r
  • ([0-9]+x[0-9]+) - 第1組(稍後提及\1反向引用):1+數字,x,1 +數字
  • .* - 任何0+字符儘可能多的

注意,你其實可以省略兩個^$在這裏,因爲有一個單一的整體線條配以sed

這裏是使用POSIX BRE正則表達式的等效溶液:

sed 's/.*(\([0-9][0-9]*x[0-9][0-9]*\).*/\1/' 

。注意,(表示在POSIX BRE字面(炭,和\(...\)此處定義了一個捕獲組。由於POSIX BRE不支持+量詞,因此您可以僅使用[0-9][0-9]*(1位數和0+位)。