我有一个有很多行的文本文件。我想从该文件中提取所有数字。 文件包含文本和数字,每行只包含一个数字。 如何在bash脚本中使用sed或awk来实现呢?
我试过
#! /bin/bash
sed 's/\([0-9.0-9]*\).*/\1/' <myfile.txt >output.txt
但这没效果。
答案 0 :(得分:2)
grep可以解决这个问题:
grep -Eo '[0-9\.]+' myfile.txt
-o
告诉我只打印匹配项,[0-9\.]+
是一个匹配数字的正则表达式。
将所有数字放在一行并将其保存在output.txt中:
echo $(grep -Eo '[0-9\.]+' myfile.txt) >output.txt
文本文件通常应以换行符结尾。上面使用echo
可以确保这种情况发生。
如果您的grep不支持-o
标志,请尝试:
echo $(tr ' ' '\n' <myfile.txt | grep -E '[0-9\.]+') >output.txt
这会使用tr
将所有空格替换为换行符(因此每个数字分别显示在一行上),然后使用grep
搜索数字。
答案 1 :(得分:1)
tr -sc '0-9.' ' ' "$file"
将每个非数字或句点字符串转换为单个空格。
答案 2 :(得分:0)
您也可以使用Bash:
while read line; do
if [[ $line =~ [0-9\.]+ ]]; then
echo $BASH_REMATCH
fi
done <myfile.txt >output.txt