以下是命令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
答案 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)
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]}"