我想从一堆(~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