自学内容网 自学内容网

Linux进阶命令-sed&split

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

经过上一章Linux日志的讲解,我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令,主要从以下几个方面来讲解:一些系统操作,系统查看处理,Linux文本处理,逻辑判断,重定向,网络传输,服务启动,文件句柄等内容。通过这些操作,让你对Linux的操作更加得心应手,具体分成以下章节进行讲解:

Linux进阶命令-echo&date&alias

Linux进阶命令-top

Linux进阶命令-ps&kill

Linux进阶命令-sort&wc

Linux进阶命令-sed&split(本章节)

Linux进阶命令-awk&uniq

Linux进阶命令-逻辑或&逻辑与

Linux进阶命令-重定向

Linux进阶命令-scp

Linux进阶命令-rsync

Linux进阶命令-rsync-daemon

Linux进阶命令-nohup&screen

Linux进阶命令-lsof

Linux进阶命令-小结

sed

我们在讲Linux-基础命令(四)的时候讲过可以通过vi命令进行编辑搜素,但是他需要先打开文件,而sed命令不需要打开文件就可以实现文件编辑。

今天要讲的sed命令,以前讲过的grep,和后面要讲的awk并称shell的3剑客。

sed(Stream Editor)是一个流编辑器,用于在文本流中进行文本替换和转换操作。它通常用于命令行环境下,可以接受标准输入(stdin)、文件内容或管道输入,并对文本进行修改或处理。

基本语法

sed [options] 'command' [file]
  • options:可选参数,用于控制 sed 命令的行为。

  • 'command'sed 命令,用于指定替换、删除、插入等操作。

  • file:要处理的文件名。如果不指定文件名,则从标准输入读取数据。

常用选项

-e:选项表示后面跟着一个编辑命令

sed -e 's/pattern/replacement/' file.txt

把文件里面每行的第一个pattern替换为replacement,并不会直接修改,而只是将修改的内容打印到控制台。

-i:直接修改文件内容,而不是输出到标准输出。这个操作不可以回退,要慎重。

sed -i 's/old/new/' file.txt

-n:安静模式,只有经过命令处理的行才被列出来。

sed -n '2,5p' file.txt

-r:使扩展正则表达式语法(支持更多的元字符)。

sed -r 's/regex/replacement/' file.txt

常用命令

替换命令 s

sed 's/pattern/replacement/' file.txt

这会将文件 file.txt 中每行第一次出现的 pattern 替换为 replacement

删除命令 d

sed '/pattern/d' file.txt

这会删除文件 file.txt 中包含 pattern 的行。

打印命令 p

sed -n '/pattern/p' file.txt

这会只打印文件 file.txt 中包含 pattern 的行。

插入命令 i 和追加命令 a

sed '/pattern/i new_line' file.txt
sed '/pattern/a new_line' file.txt

这些命令分别在包含 pattern 的行之前和之后插入 new_line

示例

将文件 data.txt 中所有的 apple 替换为 orange,并将结果输出到标准输出:

sed 's/apple/orange/g' data.txt

删除文件 list.txt 中包含 old_item 的行,并直接修改文件:

sed -i '/old_item/d' list.txt

在文件 README.md 的第二行后插入一行 Insert this line

sed '2a Insert this line' README.md

使用场景

  • 批量替换: 在文本文件中批量替换特定的字符串或模式。

  • 文本处理: 用于文件中特定模式的查找、删除、插入操作。

  • 日志处理: 分析和处理日志文件,提取或过滤感兴趣的信息。

split

split 命令用于将文件分割成较小的部分。它在 Unix 和类 Unix 系统(如 Linux)中可用。一般情况下,split 命令的语法如下:

split [选项] [输入文件] [输出文件前缀]

常用选项包括:

  • -b:指定每个输出文件的大小。例如,-b 10M 表示每个文件的大小为 10MB。

  • -l:指定每个输出文件包含的行数。

  • -d:生成的文件使用数字后缀,例如 x00x01x02

  • -a:指定数字后缀的长度,例如 -a 4 指定后缀为四位。

举个例子,如果要将文件 example.txt 按行数分割成多个文件,每个文件包含 1000 行,可以使用以下命令:

split -l 1000 example.txt output_file_prefix

这将把 example.txt 每 1000 行拆分成多个文件,文件名以 output_file_prefix 开头。希望这能帮助到你!如果有任何其他问题,请随时提出。

总结

1.sed我用来主要用来替换文件,尤其修改配置文件,但是操作之前最好通过-e参数先替换打印到控制台,确认无误以后再使用-i参数完成真实替换。

2.其实里面用到的"/"也可以用"#"替代。

3.split主要用于分割文本文件,据说还可以分割二进制文件,但是我没尝试过。

4.能分割,当然可以再组合到一起。

[root@iz2vci40gfjzarlead7vliz split]# split -b 100m bigfile 
[root@iz2vci40gfjzarlead7vliz split]# ll
total 2097156
-rw-r--r-- 1 root root 1073741824 Aug 18 00:55 bigfile
-rw-r--r-- 1 root root  104857600 Aug 18 00:55 xaa
-rw-r--r-- 1 root root  104857600 Aug 18 00:55 xab
[root@iz2vci40gfjzarlead7vliz split]# cat xa* > bigfile1
[root@iz2vci40gfjzarlead7vliz split]# ll
total 3145736
-rw-r--r-- 1 root root 1073741824 Aug 18 00:55 bigfile
-rw-r--r-- 1 root root 1073741824 Aug 18 00:59 bigfile1
-rw-r--r-- 1 root root  104857600 Aug 18 00:55 xaa
-rw-r--r-- 1 root root  104857600 Aug 18 00:55 xab
[root@iz2vci40gfjzarlead7vliz split]# md5sum bigfile bigfile1
cd573cfaace07e7949bc0c46028904ff  bigfile
cd573cfaace07e7949bc0c46028904ff  bigfile1

图片

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。


原文地址:https://blog.csdn.net/dessler/article/details/142307241

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!