使用正则表达式 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?。
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?。