使用正则表达式 tr 或 awk 在 bash 脚本中过滤变量

Filtering a variable in bash script using regex tr or awk

row1=$('+00 00:30:07.880000')

rowX=$('row1 | tr -dc '0-9')

我基本上是想过滤掉所有的特殊字符和space。

我希望有如下输出。

echo $'row1' = 003007.880000

这是最简单的方法:

$ echo '+00 00:30:07.880000' | tr -dc '[0-9].'
00003007880000

此致!

为此,您不需要正则表达式或 tr 等外部命令。 Bash的内置参数扩展可以做到:

row1='+00 00:30:07.880000'
row1=${row1//[^0-9.]/}
echo "row1=$row1"

输出row1=00003007.880000.

输出有两个前导零,它们不在问题中建议的输出中。也许有一个未说明的要求删除由空格分隔的前缀。如果是这样,可能的代码是:

row1='+00 00:30:07.880000'
row1=${row1##* }
row1=${row1//[^0-9.]/}
echo "row1=$row1"

输出 row1=003007.880000.

有关 ${row1//[^0-9.]/}${row1##* } 的解释,请参阅 How do I do string manipulations in bash?