如何利⽤sed命令⾼效删除⽂件的特定⾏
前⾔
正常来说,我们想要删除⽂件中的某些⾏内容,⼀般都是先打开这个⽂件,然后到要删除的内容,再然后选中这些⾏并按删除键进⾏删除,这在数据量很少时是没有问题的。但是,⼀旦⽂件中的⾏数据⾮常多,⽽且数据冗杂的情况下,你还要⽤上⾯的⽅法去做的话就很恐怖了。为此,今天这篇⽂章将带⼤家⼀起学习运⽤ sed 命令⾏⼯具,即使在数据多⽽杂的情况下也能⾼效⽽优雅地删除⽂件中的特定⾏内容。
sed 是 Stream Editor 的简写,它⽤于在 Linux 中进⾏基本的⽂本转换,是⽂件操作的⼀个重要命令,所以,我们也可以⽤它来实现⽂本的删除操作。
下⾯是⼀些 sed 命令的使⽤⽰例,覆盖了⼤多数的使⽤场景,由浅⼊深地帮助你学习 sed 命令,让你轻松地实现⾼效删除⽂件的特定⾏内容。
⾸先我们准备⼀个演⽰⽂件 。
#
1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
然后我们就可以运⽤ sed 命令进⾏实验了。
注意: -i 表⽰直接进⾏⽂件操作,⽽不在终端上显⽰结果。因为是演⽰所以这⾥不带 -i 选项,我们在实际中请带上 -i 选项。
1. 删除某⼀⾏
⾸先,我们先从删除某⼀⾏开始,⽐如删除第⼀⾏、最后⼀⾏,实际也就是第 N ⾏嘛。
删除第 N ⾏的命令格式:
sed 'Nd' file
我们来删除第⼀⾏试试:
# sed '1d'
After deletion:
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
很简单是吧?这⾥就不多作解释了,你想要删除第⼏⾏的内容只需要把命令中的 1 替换⼀下就 ok 了。
那问题来了,最后⼀⾏⽤什么数字表⽰呢?这⾥给⼤家⼀个⼩提⽰,可以⽤美元符号 $ 表⽰最后,所以删除最后⼀⾏的命令可以这么写:
# sed '$d'
After deletion:
1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linuxqueue是什么意思翻译
7 CentOS
8 Debian
centos和ubuntu9 Ubuntu
2. 删除某些⾏
sed 命令可以删除连续⼜或者不连续的⾏内容。
删除连续的⾏,例如删除从 5 到 7 ⾏的内容:
# sed '5,7d'
After deletion:
1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
8 Debian
9 Ubuntu
10 openSUSE
删除不连续的⾏,例如删除第 1 、第 5 、第 9 和最后⼀⾏:
linux安装mysql开启远程登陆# sed '1d;5d;9d;$d'
After deletion:
2 Unix Operating System
3 RHEL
4 Red Hat
6 Arch Linux
7 CentOS
8 Debian
另外,它还可以配合逻辑⾮ ! 使⽤,⽐如删除第 3到 6 ⾏以外的其他⾏:
# sed '3,6!d'
After deletion:
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
3. 删除空⽩⾏
sed 还⽀持删除⽂件的空⽩⾏,命令如下:
# sed '/^$/d'
After deletion:
1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
提⽰:这⾥两个斜杠 / / 内的表达式起到了⽂本匹配的作⽤,⼤家可以参考正则表达式的使⽤⽅法。下⾯将列举⼀些常⽤的⽅法来加深⼤家的学习。
4. 删除包含特定字符的⾏
假设我们想要删除⽰例⽂件中的包含 System 这个单词的⾏内容,我们可以⽤ /System/,它表⽰有出现 System 这个字符串就进⾏匹配,具体的命令如下:
# sed '/System/d'
After deletion:
3 RHEL
4 Red Hat
vfp命令大全详解5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
不仅如此,我们还可以加上⼀下逻辑条件,⽐⽅说下⾯的命令:
# sed '/System\|Linux/d'
After deletion:
3 RHEL
4 Red Hat
5 Fedora
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
符号 \| 代表逻辑或,上述命令的意思是⽂本中有 System 或 Linux 的⾏都要进⾏删除。
5. 删除特定字符开头的⾏
sixpence⾸先,我们创建另⼀个⽰例⽂件 进⾏更好地演⽰,其内容如下:
#
After deletion:
Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu
Arch Linux - 1
2 - Manjaro
3 4 5 6
上⾯也已经提到过,$ 号可以理解为结尾,那么有没有字符可以代表开头呢?答案是有的,这⾥我们可以⽤ ^ 号代表开头。
那么,我们想要删除以某⼀个字符开头的⾏时,⽐如说删除以 R 开头的⾏,可以使⽤如下命令:
# sed '/^R/d'
After deletion:
Linux Operating System
Unix Operating System
Fedora
debian
ubuntu
Arch Linux - 1
2 - Manjaro
3 4 5 6
那么问题来了,⽐如我想删除以 R 或者 F 开头的⾏,那我是不是要执⾏两次命令呢?如果是有更多岂不是要执⾏多次命令?这⾥它有⼀个简单的写法,你只要把这些字符写在⼀对中括号 [] ⾥就可以了:
# sed '/^[RF]/d'
After deletion:
Linux Operating System
Unix Operating System
debian
ubuntu
Arch Linux - 1
2 - Manjaro
3 4 5 6
上⾯命令的作⽤是删除以 R 或者 F 开头的⾏。
6. 删除特定字符结尾的⾏
同上⾯⼀个道理,删除以某⼀个字符结尾的⾏,⽐⽅说删除以 m 结尾的⾏,我们可以这样做:
# sed '/m$/d'
After deletion:
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
删除以 x 或 m 结尾的⾏可以这样写:
# sed '/[xm]$/d'
After deletion:
3 RHEL
splitter网站4 Red Hat
5 Fedora
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
7. 删除以⼤写字母开头的⾏
这⾥问题⼜来了,我想要删除所有以⼤写字母开头的⾏呢?按照上⾯的做法是不是要将 A 到 Z 这 26 个字母都写进 [ ] ⾥呢?其实我们⼤可不必这样做,在 A 和 Z 中间加个 - 就可以了:
# sed '/^[A-Z]/d'
After deletion:
debian
ubuntu
2 - Manjaro
3 4 5 6
机智的你看到这⾥肯定会想到其他类似的⽤法的了,不妨看看下⾯是否有你想到的命令吧。
8. 删除包含字母字符的⾏
# sed '/[A-Za-z]/d'
After deletion:
3 4 5 6
9. 删除包含数字的⾏
# sed '/[0-9]/d'
After deletion:
Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu
另外,通过这个例⼦,我们可以加上 ^ 和 $ 更好地看到他们三个之间的区别:
# sed '/^[0-9]/d'
After deletion:
Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu
Arch Linux - 1
# sed '/[0-9]$/d'
After deletion:
Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu
2 - Manjaro
10. 其他更多
实际上,我们要删除的⽂件内容是更为具体的,简单的条件是满⾜不了我们的需求的,所以,sed 也⽀持更复杂的条件组合。⽐⽅说我要指定删除在 1 到 6 ⾏内有 Linux 这个词的内容,那么:
# sed '1,6{/Linux/d;}'
After deletion:
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
删除包含 System 以及其下⼀⾏的内容:
# sed '/System/{N;d;}'
After deletion:
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE
总结
到此这篇关于如何利⽤sed命令⾼效删除⽂件的特定⾏的⽂章就介绍到这了,更多相关sed命令删除⽂件特定⾏内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。