作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
经过上一章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
:生成的文件使用数字后缀,例如x00
,x01
,x02
。 -
-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
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。