削减一些shell输出的最佳方法是什么?

时间:2015-07-12 19:32:03

标签: bash shell awk grep

以下是命令cvt 1280 760的输出。我需要在第二行"之后提取所有内容,直到行结尾,以便在我的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

5 个答案:

答案 0 :(得分:1)

您可以使用sed。

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

或grep

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

答案 1 :(得分:1)

您可以执行此操作(使用stdin上的输入):

grep \" | cut -d\" -f3-
  • grep \" | - 仅限"
  • -d\" - "是您的分隔符
  • -f3- - 您想要第3个字段及其后的所有内容

对于file

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

输出:

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

答案 2 :(得分:1)

使用awk可能会有效:

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

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

答案 3 :(得分:0)

使用bash:

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

最后一行是process substitution的重定向。

答案 4 :(得分:0)

使用Bash Pattern Matching

Person

输出:

#!/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]}"