bash - 剥离管道输出的第一部分

标签 bash sed

我有一个输出以下内容的 bash 脚本:

SUM = 137892134.0000000

我需要去掉字符串的第一部分,只留下数字,如果可能的话,将其格式化为整数。我假设我需要使用 sed 但我学习它的能力似乎为零。

我需要能够编写一个条件语句,该条件语句可以在值小于 100 时进行操作。我不知道是否可以在 bash 脚本中执行此操作,但这将是我挑战的第二部分。

最佳答案

sed 替换的基本形式是:

s/replace this/with this/

其中“replace this”和“with this”都是正则表达式。在您的情况下,您希望完全摆脱开头的文字字符串“SUM =”和末尾的小数点。所以:

#!/bin/bash
sum=$(your_script.sh | sed 's/^SUM = //' | sed 's/\..*//')
if ! egrep -q '^[0-9]+$' <<< $sum; then
    echo "your_script.sh printed unexpected output!"
    exit 1
fi
if [ $sum -lt 100 ]; then
    echo "$sum is less than 100"
else
    echo "$sum is not less than 100"
fi

第一行是将“SUM = 137892134.0000000”转换为“137892134”。第一个 sed 将字符串开头的“SUM =” (^) 替换为空(即删除它)。第二个 sed 找到第一个句点字符 (\.) 并将其及其后面的所有内容 (.*) 替换为空。然后使用 $(...) 将结果字符串保存到变量 $sum 中。

使用egrep的if语句正在检查以确保我们保存在$sum中的值实际上是一个整数,如果不是则跳过。

第二个 if 语句将 $sum 的值(我们现在知道它是一个整数)与 100 进行比较。

关于bash - 剥离管道输出的第一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438653/

相关文章:

bash - 如何在 shell 脚本中使用个人访问 token 访问 GitHub API?

linux - 是否有可能知道 .tar.bz2 中文件占用的空间

regex - 正则表达式从字符串中删除不需要的文本

linux - 如何比较文件与关键字文件并用关键字文件第 3 列中的正确字符串替换第 3 列的不匹配字符串

shell - 如何在 shell 中的两列之间插入不同的分隔符

shell - 使用 sed 或 awk 如何删除特定行周围的模式

sed - 如何将 sed 模式与 : 匹配

bash - 修改文件中一行的一部分

bash - 不是空文件,但 "wc -l"输出 0

linux - 使用 grep 解析多行变量