一、需求:
我如果有几百个文件,需要将含有指定字符串的行删除,我如何做呐?
最后找的一个sed命令。可以很方便的解决我的问题。
我之前整理过一次linux常用命令的文章,这个算是一个补充吧。
由于,我每次更改原来的文章,再保存,再发布就审核不通过了,不知道是不是CSDN的问题还是咋回事???
所以以后文章我只能新写一个,老的文章粘贴到前面吧。
整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)
二、实战:
sed命令常用到的两个选项:
-i : 直接在文件上编辑、修改 (edit files in place)
-e[默认选项]:只在命令行输出,而文件不改变 【可以用来测试】
下面我会以-i为例,应为实际我要修改原文件。
1、sed命令删除特定行号
删除第N行
sed -i ‘Nd’ filename
比如:删除第五行
# 修改原文件
sed -i '5d' test.txt
# 控制台输出,测试使用
sed -e '5d' test.txt
源文件:
为了方便演示,我这里使用-e来控制台显示,如果实际需要修改文件,改为-i即可。
2、删除第N~M行
sed -i ‘N,Md’ filename
file的[N,M]行都被删除
还是以上面的测试数据来测试:
# 修改原文件
sed -i '3,5d' test.txt
# 控制台输出,测试使用
sed -e '3,5d' test.txt
可以查看出,3-5行数据删除了
3、删除最后一行
sed -i ‘$d’ filename
上面的测试文件最后有空行,我给删除了,不然测试控制台输出看不出来。
4、删除包含"xxx"的行
sed -i ‘/xxx/d’ filename
其实这个就是我想找的命令,可以将我的文件不管多少号,将含有的字符串的行删除。
sed -i '/mkdir/d' test.txt
sed -e '/mkdir/d' test.txt
5、删除空行
将一个文件的所有空行删除
sed -e '/^$/d' test.txt