【发布时间】:2013-11-12 12:31:56
【问题描述】:
例子:
file="123 hello"
如何编辑字符串file,使其仅包含数字并删除文本部分?
所以,
echo $file
应该只打印123。
【问题讨论】:
标签: linux bash shell ubuntu terminal
例子:
file="123 hello"
如何编辑字符串file,使其仅包含数字并删除文本部分?
所以,
echo $file
应该只打印123。
【问题讨论】:
标签: linux bash shell ubuntu terminal
这是sed的一种方式:
$ echo $file | sed 's/[^0-9]*//g'
123
$ echo "123 he23llo" | sed 's/[^0-9]*//g'
12323
或者用纯bash:
$ echo "${file//[!0-9]/}"
123
$ file="123 hello 12345 aaa"
$ echo "${file//[!0-9]/}"
12312345
要将结果保存到变量本身,请执行以下操作
$ file=$(echo $file | sed 's/[^0-9]*//g')
$ echo $file
123
$ file=${file//[!0-9]/}
$ echo $file
123
【讨论】:
file=${file//[!0-9]/}。此外,您通常可以将echo something | command 替换为 command <<< something。
<<< 对于开始使用 bash-script 的人来说可能很奇怪。我用file=$file{file//[!0-9]/} 更新我的答案,非常感谢!
git version 1.7.1)?使用${gitVersion//[!0-9.]/} 并保留句点。
file="hola que tal 23" 然后echo "${file//[!0-9]/}" 返回 23。
你可以说:
echo ${file%%[^0-9]*}
但是,这在某些情况下会遇到问题:
$ file="123 file 456"
$ echo ${file%%[^0-9]*}
123
使用tr:
$ file="123 hello 456"
$ new=$(tr -dc '0-9' <<< $file)
$ echo $new
123456
【讨论】:
${file%%[^0-9]*} 将始终删除从第一个非数字到字符串末尾的所有内容。 %% 根本不是你想要的(% 或 # 或 ## 也不是)。我觉得我在这里错过了一个笑话。
sed,但我认为提出此解决方案没有任何问题。此外,devnull 已经警告了第一个解决方案的局限性,并给出了另一个运行良好的解决方案。更多解决方案,更多财富。