从文本文件中提取所有数字并将其存储在另一个文件中

时间:2014-02-08 20:01:00

标签: regex bash sed awk

我有一个有很多行的文本文件。我想从该文件中提取所有数字。 文件包含文本和数字,每行只包含一个数字。 如何在bash脚本中使用sed或awk来实现呢?

我试过

#! /bin/bash
sed 's/\([0-9.0-9]*\).*/\1/' <myfile.txt >output.txt

但这没效果。

3 个答案:

答案 0 :(得分:2)

grep可以解决这个问题:

grep -Eo '[0-9\.]+' myfile.txt 

-o告诉我只打印匹配项,[0-9\.]+是一个匹配数字的正则表达式。

将所有数字放在一行并将其保存在output.txt中:

echo $(grep -Eo '[0-9\.]+' myfile.txt) >output.txt

文本文件通常应以换行符结尾。上面使用echo可以确保这种情况发生。

非GNU grep:

如果您的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