2015-07-12 54 views
1

以下是命令cvt 1280 760的輸出。我需要在第二個"之後將所有內容提取到該行的末尾,以便在我的shell腳本的下一行中使用。這樣做最好的方法是什麼?最好的方法來削減一些shell輸出?

# 1280x760 59.91 Hz (CVT) hsync: 47.33 kHz; pclk: 78.75 MHz 
Modeline "1280x760_60.00" 78.75 1280 1344 1472 1664 760 763 773 790 -hsync +vsync 
+0

你想要得到的第一線? –

+0

不,只是在第二行開始78.75(並不總是78.75)。 – cjm2671

回答

1

您可以使用sed。

sed -n 's/^[^"]*"[^"]*"[[:blank:]]*//p' file 

或者用grep

grep -oP '^[^"]*"[^"]*"\s*\K.*' file 
1

你可以(在stdin與輸入)做到這一點:

grep \" | cut -d\" -f3- 
  • grep \" | - " - 只有"
  • -d\"線一世是你的分隔符
  • -f3- - 你想要的第三場及其之後的所有

爲了您file

<file grep \" | cut -d\" -f3- 

它輸出:

78.75 1280 1344 1472 1664 760 763 773 790 -hsync +vsync 
+0

我試過這個樣子cvt 1280 760 | cut -d「-f3- 但它只是返回完整輸出? – cjm2671

+0

對於您的輸入,在給我'78.75 1280 1344 1472 1664 760 763 773 790 -hsync + vsync',即 - 第二個」 '。 – PSkocik

1

使用awk將可能工作:

awk -F'"[ ]+' '{print $2}' file 

使用-F + "(one or more spaces)充當字段分隔符。

0

使用bash:

while IFS='"' read field1 field2 rest; do 
    # do something with "$rest" 
    echo "$rest"; 
done < <(cvt 1280 760) 

最後一行是從process substitution重定向。

0

使用Bash Pattern Matching

#!/bin/bash 
s='Modeline "1280x760_60.00" 78.75 1280 1344 1472 1664 760 763 773 790 -hsync +vsync' 
pat='[^"]*"[^"]*"(.*)' 
[[ $s =~ $pat ]] 
echo "${BASH_REMATCH[1]}" 

輸出:

78.75 1280 1344 1472 1664 760 763 773 790 -hsync +vsync