从文件中删除除数字1,2,3,4和5之外的所有内容

时间:2012-03-16 00:41:34

标签: bash sed awk grep

我想从文件中删除所有内容,这样只剩下数字1,2,3,4和5。应保留换行符。如何从文件中删除其他所有内容?

3 个答案:

答案 0 :(得分:5)

这样的事情:

sed -i 's/[^1-5]//g' file

这是一个小测试:

$ echo $'ab129c\n1d3e5fqq9cm3275\ncn730m271nv05482m1'
ab129c
1d3e5fqq9cm3275
cn730m271nv05482m1
$ echo $'ab129c\n1d3e5fqq9cm3275\ncn730m271nv05482m1'|sed 's/[^1-5]//g'
12
135325
3215421

答案 1 :(得分:2)

tr应该比sed更有效率。复制icyrock的测试:

$ echo $'ab129c\n1d3e5fqq9cm3275\ncn730m271nv05482m1' | tr -dc "1-5\n"
12
135325
3215421

tr有一个缺点:它无法对现有文件进行就地编辑(如sed -i所做的那样);如果这是你想要的,你必须写一个临时文件,然后用原来的文件替换原来的文件:

tr -dc "1-5\n" <file.txt >tempfile.txt && mv tempfile.txt file.txt

答案 2 :(得分:1)

我是这样做的:

sed -r 's/[^12345]//g' <file>

将它转储到屏幕,您可以使用以下命令写入文件

sed -r 's/[^12345]//g' <file> > <new_file>

或者您可以使用

直接编辑文件
sed -i -r 's/[^12345]//g' <file>