【问题标题】:How to properly use the grep command to grab and store integers?如何正确使用 grep 命令来抓取和存储整数?
【发布时间】:2016-05-02 08:19:31
【问题描述】:

我目前正在为类构建一个 bash 脚本,我正在尝试使用 grep 命令从一个简单的计算器程序中获取值并将它们存储在我分配的变量中,但是当我一直收到语法错误消息时尝试运行脚本。关于如何解决它的任何建议?我的脚本如下所示:

#!/bin/bash

addanwser=$(grep -o "num1 + num2" Lab9 -a 5 2)
echo "addanwser"

subanwser=$(grep -o "num1 - num2" Lab9 -s 10 15)
echo "subanwser"

multianwser=$(grep -o "num1 * num2" Lab9 -m 3 10)
echo "multianwser"

divanwser=$(grep -o "num1 / num2" Lab9 -d 100 4)
echo "divanwser"

modanwser=$(grep -o "num1 % num2" Lab9 -r 300 7)
echo "modawser"`

【问题讨论】:

  • 什么是Lab9?如果你只说Lab9 -a 5 2,你会得到什么?给出该输出,以便我们更好地理解问题。对我来说,您似乎想做grep -o "num1 + num2" "$(Lab -a 5 2)"
  • 您得到的确切错误信息是什么?它应该出现在您的问题中(以“>”开头)。
  • 另外,您的脚本末尾有一个额外的 `(在 echo "modawser"` 中),这可能会导致问题。
  • Lab9 是计算器程序,我在其中获取我想要获取和存储的整数,-a 5 2 部分是参数,它表示加 5 + 2,我想存储输出。
  • 我收到的错误消息是

标签: bash shell unix


【解决方案1】:

你想grep一个命令的输出。

grep 从文件或标准输入中搜索。所以你可以说这些等价物:

grep X file                 # 1. from a file
... things ... | grep X     # 2. from stdin
grep X <<< "content"        # 3. using here-strings

对于这种情况,您想使用最后一个,这样您就可以直接执行程序及其输出提要grep

grep <something> <<< "$(Lab9 -s 10 15)"

这和说的一样:

Lab9 -s 10 15 | grep <something>

这样grep 将作用于您程序的输出。由于我不知道Lab9 是如何工作的,让我们用一个简单的例子,seq 返回从 5 到 15 的数字:

$ grep 5 <<< "$(seq 5 15)"
5
15

【讨论】:

    【解决方案2】:

    grep 通常用于查找文本文件的匹配行。要实际抓取匹配行的一部分,需要使用其他工具,例如 awk。

    假设输出看起来像“num1 + num2 = 54”(即字段由空格分隔),这应该可以完成您的工作:

    addanwser=$(Lab9 -a 5 2  | awk '{print $NF}')
    echo "$addanwser"
    

    确保在回显时不要错过 addanwser 之前的“$”符号。 $NF 选择最后一个字段。您可以使用 $n 选择第 n 个字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 2021-10-12
      • 2018-07-25
      • 2016-09-15
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      相关资源
      最近更新 更多