从文本文件中删除所有非数字字符

从文本文件中删除所有非数字字符

我想从一堆(~2000).txt 文件中删除所有非数字字符。

例如file1.txt:

Sydney  33
Castle hill  47
Lake's town hill  79

应该变成,file1.txt:

33
47
79

我想更改每个文本文件的内容,而不是在屏幕上打印输出。谢谢!

答案1

sed

sed 's/[^[:digit:]]\+//g'
  • [^[:digit:]]\+匹配一个或多个 ( +) 非数字 ( [^[:digit:]]) 并且我们将其全局替换为空字符串 ( g)

使用sed -i(或sed -i.bak保留带有.bak扩展名的原始文件)对文件进行就地编辑。


awk与的功能相同sub(Regex, Replacement, Input)

awk 'sub("[^[:digit:]]+", "", $0)'

用于--inplace就地编辑文件。


例子:

% cat file.txt                 
Sydney  33
Castle hill  47
Lake's town hill  79

% sed 's/[^[:digit:]]\+//g' file.txt               
33
47
79

% awk 'sub("[^[:digit:]]+", "", $0)' file.txt
33
47
79

答案2

tr假设您不想删除换行符)

$ tr -dc '[0-9\n]' < file1.txt
33
47
79

考虑到文件的结构,您还可以使用它awk来打印最后一个以空格分隔的字段:

$ awk '{print $NF}' file1.txt
33
47
79

答案3

使用:

$ echo "Jim 5" > file.txt
$ echo "Jane 3" >> file.txt
$ sed -i 's/[^0-9]//g' file.txt
$ cat file.txt
5
3

使用您的测试数据:

$ cat file1.txt
Sydney 33
Castle hill 47
Lake's town hill 79

$ sed -i 's/[^0-9]//g' file1.txt

$ cat file1.txt
33
47
79

相关内容