我有一个有很多行的文本文件。我想从该文件中提取所有数字。文件包含文本和数字,每行仅包含一个数字。如何在 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.]+
是匹配数字的正则表达式。
将所有数字放在一行并保存在输出中.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
搜索数字。
tr -sc '0-9.' ' ' "$file"
将每个非数字或句点字符字符串转换为单个空格。
你也可以使用 Bash:
while read line; do
if [[ $line =~ [0-9.]+ ]]; then
echo $BASH_REMATCH
fi
done <myfile.txt >output.txt