簡體   English   中英

削減一些shell輸出的最佳方法是什么?

[英]Best way to cut up some shell output?

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

你可以使用sed。

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

或者grep

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

你可以這樣做(在stdinstdin ):

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

使用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 )

最后一行是來自進程替換的重定向。

使用Bash模式匹配

#!/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM