以下是命令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
以下是命令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
您可以使用sed。
sed -n 's/^[^"]*"[^"]*"[[:blank:]]*//p' file
或者用grep
grep -oP '^[^"]*"[^"]*"\s*\K.*' file
你可以(在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
使用awk
将可能工作:
awk -F'"[ ]+' '{print $2}' file
使用-F
+ "(one or more spaces)
充当字段分隔符。
使用bash:
while IFS='"' read field1 field2 rest; do
# do something with "$rest"
echo "$rest";
done < <(cvt 1280 760)
最后一行是从process substitution重定向。
#!/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
你想要得到的第一线? –
不,只是在第二行开始78.75(并不总是78.75)。 – cjm2671