【发布时间】:2011-06-17 15:24:23
【问题描述】:
我试图在这里找到解决方案,但找不到;给定字符串,如
ABC3
DFGSS34
CVBB3
如何提取整数以便得到
3
34
3
??
【问题讨论】:
我试图在这里找到解决方案,但找不到;给定字符串,如
ABC3
DFGSS34
CVBB3
如何提取整数以便得到
3
34
3
??
【问题讨论】:
对于仅 bash 的解决方案,您可以使用参数模式替换:
pax$ xyz=ABC3 ; echo ${xyz//[A-Z]/}
3
pax$ xyz=DFGSS34 ; echo ${xyz//[A-Z]/}
34
pax$ xyz=CVBB3 ; echo ${xyz//[A-Z]/}
3
它与sed 解决方案非常相似,但具有不必分叉另一个进程的优点。这对于小型工作可能并不重要,但我遇到过这样的情况:对文件的许多行执行此类操作,并且非分叉显着提高了速度。
【讨论】:
()[]{}#$!.等。不应该更好地阅读echo ${xyz//[^0-9]/}而不是提取“除了整数”?
只需一个简单的 sed 命令即可完成工作:
sed 's/[^0-9]//g' file.txt
3
34
3
【讨论】:
用tr怎么样?
for s in ABC3 DFGSS34 CVBB3 ; do
tr -cd 0-9 <<<"$s"
echo
done
【讨论】:
grep 版本呢?
grep -o '[0-9]*' file.txt
【讨论】: