【问题标题】:Extract substring in BASH script whit characters treated as numbers提取 BASH 脚本中的子字符串,将字符视为数字
【发布时间】:2017-02-05 07:29:48
【问题描述】:

我需要在 bash 脚本中提取字符串的子字符串。 这是带有“回声”的代码:

echo "number:"
echo "$number"
echo "bb"
registers3=$(echo $number | grep -o -E '[0-9]+')
registers2="$(grep -oE '[0-9]+' <<< "$number")"
registers="${number//[^0-9]/}"
valor=$(grep -o "[0-9]" <<<"$number")
echo "valor:"
echo $valor
echo "reg:"
echo "$registers"
echo "reg2:"
echo "$registers2"
echo "reg3:"
echo "$registers3"

这是输出:

   number:
/ >  -------
420
/ >
bb
valor:
1 0 3 4 4 2 0
reg:
1034420
reg2:
1034
420
reg3:
1034
420

问题在于 $number 的特殊字符。

你能帮我只提取数字吗?在这种情况下是“421”

谢谢!!!

编辑: 如果我将 $number 放入文件 ($number> file.txt) 并使用 vi 和 :set list 打开,我会得到:

^[[?1034h/ >  -------$
420$
/ > $

【问题讨论】:

  • 您的示例令人困惑,特别是因为您没有在变量周围使用引号(例如echo "$number"),因此输出被破坏了。老实说,看起来主要问题是你在做echo $number | grep而不是echo "$number" | grep
  • 感谢汤姆的帮助。我用引号编辑 mi 帖子 :)

标签: string bash grep substring character


【解决方案1】:

而不是这个:

registers=$(echo $number | grep -o -E '[0-9]+')

试试这个:

registers="$(grep -oE '[0-9]+' <<< "$number")"

或者更好的是,这个:

registers="${number//[^0-9]/}"

【讨论】:

  • 感谢您的回复!但不工作。第一个选项我得到这个输出:reg: 1034 420 和第二个这个:1034420
  • 当您运行上述行时,$number 的确切值是多少?
  • 我在mi post中编辑的数字的值。它的数字: /> ------- 420 /> (with \n)
  • 试试这个:做number=$'/ &gt; ------- 420 / &gt;\n',然后尝试我的2个解决方案,例如registers="${number//[^0-9]/}" 然后做echo "$registers"
  • 在这种情况下他们工作!但问题是(我认为)是原始 $number 我有 \n (或另一个特殊字符)(请参阅原始帖子的输出我有 3 \n)。感谢您的帮助;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2015-04-26
  • 2023-03-17
  • 2014-04-23
  • 2021-01-21
  • 2021-10-31
相关资源
最近更新 更多