良许Linux

文章数:922 被阅读:3074353

账号入驻

Sed命令深度解析与实战应用

最新更新时间:2024-09-16
    阅读数:


1

简介

Sed,全称是Stream Editor,是一个在Linux/Unix系统中非常强大的非交互式文本处理工具。它能够对文本流进行复杂的编辑操作,如查找、替换、删除行等,而无需直接修改文件。

Sed主要通过脚本或者直接在命令行中指定操作来完成任务,特别适合于批量处理文件或数据流。本文将深入解析sed的常用功能,并通过一系列实战案例展示其强大之处。


2

sed基础语法

sed的基本命令格式为:

sed [选项] '操作' 输入文件

● 选项:可选参数,如-n表示只输出处理后的结果,不自动打印每一行。

● 操作:由sed命令和地址范围组成,用于定义对哪些行执行什么操作。

● 输入文件:指定要处理的文件名,也可以是标准输入。


地址范围

地址可以是行号(如3),正则表达式(如/pattern/),或者二者的组合,用于指定操作的作用范围:

● 单一地址:如3,只对第3行操作。

● 地址区间:如3,5,对第3到第5行操作。

● 正则表达式匹配:如/pattern/,对匹配该模式的所有行操作。


3

常用sed命令


替换操作:s/原始文本/新文本/

最常用的sed命令之一,用于查找并替换文本。

sed 's/old/new/g' file.txt


这会将file.txt中所有old替换成new。

其中:

●     s 是 substitute(替换)的缩写,指示 sed 去执行查找和替换的操作。它后面跟着的是一个模式匹配表达式和一个替换字符串,形式为s/查找模式/替换字符串/。这里的/是分隔符,可以用来分隔查找模式和替换字符串,也可以使用其他字符作为分隔符。

●     g 是 global(全局)的选项,表示要进行全局替换,即在每一行中,如果存在多个匹配项,则全部进行替换。如果不加g选项,sed 只会替换每行中第一个匹配到的实例。



删除行:d

删除匹配到的行。

sed '/pattern/d' file.txt


删除包含pattern的所有行。



插入行:i \

在匹配到的行前插入文本。

sed '/pattern/i\New line before' file.txt


在每行匹配到pattern之前插入New line before。



追加行:a \

在匹配到的行后追加文本。

sed '/pattern/a\New line after' file.txt


在每行匹配到pattern之后追加New line after。



显示行号:=, p

● =打印出行号。

● p打印当前行。

sed '=' file.txt


显示每一行的行号。


4

实战应用


实例1:批量替换域名

假设需要将配置文件中的所有www.oldsite.com替换为www.newsite.com。

sed -i 's/www.oldsite.com/www.newsite.com/g' config.txt


这里-i选项表示直接修改原文件。



实例2:删除注释行

从一个脚本中删除所有以#开头的注释行。

sed '/^#/d' script.sh



实例3:添加版权信息

在每个源代码文件的开头添加版权声明。

sed -i '1i\/*\n * Copyright (c) 2024. All rights reserved.\n */' *.c


这会在每个.java文件的第一行前插入版权信息。



实例4:提取特定列

虽然awk更擅长处理列数据,但sed也能做到简单的列提取。

cut -d',' -f1 data.csv | sed 's/,//g'


先用cut按逗号分隔提取第一列,再用sed去掉可能存在的逗号,假设我们想得到不含逗号的纯文本列。


5

总结

Sed以其灵活、高效的特点,在文本处理领域占据着不可替代的地位。通过掌握其基本命令和高级技巧,可以极大提高日常运维和开发工作的效率。

本文仅是sed功能的冰山一角,鼓励读者进一步探索sed的更多高级用法,如分支、循环、标签跳转等,以应对更加复杂多变的文本处理需求。




招已经开始啦,大家如果不做好充足准备的话, 招很难找到好工作。


送大家一份就业大礼包,大家可以突击一下春招,找个好工作!


 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved