2015-07-12 52 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