【问题标题】:Bash Scripting custom output [duplicate]Bash脚本自定义输出[重复]
【发布时间】:2021-08-11 11:42:47
【问题描述】:

我是 Bash 脚本的初学者,我需要为变量分配一个自定义命令输出,而不是整个命令只是它的一部分。有什么方法可以做到吗?
命令:

gtf 1600 720 60

输出:

# 1600x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 93.10 MHz
  Modeline "1600x720_60.00"  93.10  1600 1672 1840 2080  720 721 724 746  -HSync +Vsync

我要存储的内容:

"1600x720_60.00"  93.10  1600 1672 1840 2080  720 721 724 746  -HSync +Vsync

【问题讨论】:

  • 您到底想在变量中存储什么?我认为这是我的答案中命令的输出。
  • 我想从这个输出中存储 1600x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 93.10 MHz 模型行 "1600x720_60.00" 93.10 1600 1672 1840 2080 720 721 724 746 -HSync +Vsync this "1600x720_60.00" 93.10 1600 1672 1840 2080 7460 7460 7280 7280 7460 7460 同步
  • 您可以使用我的回答中的反引号/subshel​​l 语法。只需通过管道 (|) 将命令的输出发送到 sed 命令,例如your_command | sed 's/^.*Modeline //'如果命令将输出写入stderr,一定要先重定向:your_command 2>&1
  • 您可以通过添加您正在运行的命令、其输出以及要存储在变量中的输出的相关部分来改进您的问题。
  • @AlexandruWorld :所以你还想捕捉输出的最后一行没有Modelline这个词吗?或者这只是一个例子,格式可能会有所不同?而且我猜输出是标准输出而不是标准错误,对吧?

标签: bash command


【解决方案1】:

您可以将命令括在反引号中以存储其输出:

a=`echo Hello`

或者,您也可以使用$():

a=$(echo Hello)

如果您只想存储部分输出,可以将命令的输出通过管道传输到后处理脚本,例如sed:

a=$(echo foo | sed 's/foo/bar/')

【讨论】:

    【解决方案2】:

    有很多方法可以达到你想要的输出,但我喜欢 grep:

    gtf 1600 720 60 | grep -Po '(Modeline)\K(.*)'
    

    在这里,您将使用带有 grep 的正则表达式来捕获“Modelline”之后的行上的任何输出。

    然后您可以使用命令替换将输出存储在变量中:

    OUTPUT=$(gtf 1600 720 60 | grep -Po '(Modeline)\K(.*)')
    
    echo "$OUTPUT"
    # "1600x720_60.00"  93.10  1600 1672 1840 2080  720 721 724 746  -HSync +Vsync
    

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多