以下是命令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