使用regex tr或awk过滤bash脚本中的变量

使用regex tr或awk过滤bash脚本中的变量,regex,bash,shell,awk,regex-negation,Regex,Bash,Shell,Awk,Regex Negation,row1=$('+00:30:07.880000') rowX=$('row1 | tr-dc'0-9') 我基本上想过滤掉所有的特殊字符和空格 我希望得到如下输出 echo$'row1'=003007.880000这是最简单的方法: $ echo '+00 00:30:07.880000' | tr -dc '[0-9].' 00003007880000 问候 不需要正则表达式或外部命令,如tr。Bash的内置参数扩展可以做到这一点: row1='+00 00:30:07.880000' r

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

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

我基本上想过滤掉所有的特殊字符和空格

我希望得到如下输出


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##*}
echo'+00:30:07.880000''tr-dc'0-9.
echo'+00:30:07.880000'.[sed's/[^0-9.]//code>OP也希望保留句点。我认为OP在变量赋值和命令替换方面都与bash语法有冲突,因此,我建议您也展示一下如何正确使用它们