前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Linux进阶命令-sed&split

Linux进阶命令-sed&split

作者头像
运维小路
发布2024-11-01 19:36:54
发布2024-11-01 19:36:54
7400
代码可运行
举报
文章被收录于专栏:运维小路
运行总次数:0
代码可运行

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

经过上一章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)、文件内容或管道输入,并对文本进行修改或处理。

基本语法

代码语言:javascript
代码运行次数:0
复制
sed [options] 'command' [file]
  • options:可选参数,用于控制 sed 命令的行为。
  • 'command'sed 命令,用于指定替换、删除、插入等操作。
  • file:要处理的文件名。如果不指定文件名,则从标准输入读取数据。

常用选项

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

代码语言:javascript
代码运行次数:0
复制
sed -e 's/pattern/replacement/' file.txt

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

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

代码语言:javascript
代码运行次数:0
复制
sed -i 's/old/new/' file.txt

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

代码语言:javascript
代码运行次数:0
复制
sed -n '2,5p' file.txt

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

代码语言:javascript
代码运行次数:0
复制
sed -r 's/regex/replacement/' file.txt

常用命令

替换命令 s

代码语言:javascript
代码运行次数:0
复制
sed 's/pattern/replacement/' file.txt

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

删除命令 d

代码语言:javascript
代码运行次数:0
复制
sed '/pattern/d' file.txt

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

打印命令 p

代码语言:javascript
代码运行次数:0
复制
sed -n '/pattern/p' file.txt

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

插入命令 i 和追加命令 a

代码语言:javascript
代码运行次数:0
复制
sed '/pattern/i new_line' file.txt
sed '/pattern/a new_line' file.txt

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

示例

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

代码语言:javascript
代码运行次数:0
复制
sed 's/apple/orange/g' data.txt

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

代码语言:javascript
代码运行次数:0
复制
sed -i '/old_item/d' list.txt

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

代码语言:javascript
代码运行次数:0
复制
sed '2a Insert this line' README.md

使用场景

  • 批量替换: 在文本文件中批量替换特定的字符串或模式。
  • 文本处理: 用于文件中特定模式的查找、删除、插入操作。
  • 日志处理: 分析和处理日志文件,提取或过滤感兴趣的信息。

split

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

代码语言:javascript
代码运行次数:0
复制
split [选项] [输入文件] [输出文件前缀]

常用选项包括:

  • -b:指定每个输出文件的大小。例如,-b 10M 表示每个文件的大小为 10MB。
  • -l:指定每个输出文件包含的行数。
  • -d:生成的文件使用数字后缀,例如 x00, x01, x02
  • -a:指定数字后缀的长度,例如 -a 4 指定后缀为四位。

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

代码语言:javascript
代码运行次数:0
复制
split -l 1000 example.txt output_file_prefix

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

总结

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

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

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

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

代码语言:javascript
代码运行次数:0
复制
[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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sed
    • 基本语法
    • 常用选项
    • 常用命令
    • 示例
    • 使用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档