【发布时间】:2014-03-06 05:52:05
【问题描述】:
我有一个包含很多行的文本文件。我想从该文件中提取所有数字。 文件包含文本和数字,每行仅包含一个数字。 如何在 bash 脚本中使用 sed 或 awk?
我试过了
#! /bin/bash
sed 's/\([0-9.0-9]*\).*/\1/' <myfile.txt >output.txt
但这没有用。
【问题讨论】:
我有一个包含很多行的文本文件。我想从该文件中提取所有数字。 文件包含文本和数字,每行仅包含一个数字。 如何在 bash 脚本中使用 sed 或 awk?
我试过了
#! /bin/bash
sed 's/\([0-9.0-9]*\).*/\1/' <myfile.txt >output.txt
但这没有用。
【问题讨论】:
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 搜索数字。
【讨论】:
tr -sc '0-9.' ' ' "$file"
将每个非数字或句点字符的字符串转换为一个空格。
【讨论】:
tr -dc '[:digit:]\n' 或 tr -dc '0-9\n'
你也可以使用 Bash:
while read line; do
if [[ $line =~ [0-9\.]+ ]]; then
echo $BASH_REMATCH
fi
done <myfile.txt >output.txt
【讨论】: