shell 命令之sed

sed命令的作用

sed命令到底有啥用?笔者使用的最多的场景就是修改文件内容,批量修改文件里面匹配到的字符串,举个栗子,有一个文件里面有100个 hostname 字符串,你要把这个文件里面出现的所有hostname 改成 HOSTNAME,如果手动通过vim编辑,你会崩溃的。而使用一个sed命令,就可以解决这个问题。

sed的执行过程

在这里插入图片描述

sed命令的使用
sed 语法

sed的命令格式: sed [option] ‘模式匹配 command’ filename

同样的我们先分解一下命令的结构,有三个部分: option , 模式匹配 , command

sed 常用的 [option]

sed命令比较常用的选项([option] ):

-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-i :直接修改文件内容

sed 匹配模式
普通模式含义
xx为行号
x,y表示行号从x到y
/pattern查询包含模式的行
/pattern /pattern查询包含两个模式的行
pattern/,x在给定行号上查询包含模式的行
x,/pattern/通过行号和模式查询匹配的行
x,y!查询不包含指定行号x和y的行
正则匹配模式含义
^锚点行首的符合条件的内容,用法格式"^pattern"
$锚点行首的符合条件的内容,用法格式"pattern$"
^$空白行
.匹配任意单个字符
*匹配紧挨在前面的字符任意次(0,1,多次)
.*匹配任意长度的任意字符
\?匹配紧挨在前面的字符0次或1次
{m,n}匹配其前面的字符至少m次,至多n次
{m,}匹配其前面的字符至少m次
{m}精确匹配前面的m次{0,n}:0到n次
<锚点词首----相当于 \b,用法格式:<pattern
>锚点词尾,用法格式:>pattern
<pattern>单词锚点
[]匹配指定范围内的任意单个字符
[^]匹配指定范围外的任意单个字符
[:digit:]所有数字, 相当于0-9, [0-9]—> [[:digit:]]
[:lower:]所有的小写字母
[:upper:]所有的大写字母
[:alpha:]所有的字母
[:alnum:]相当于0-9a-zA-Z
[:space:]空白字符
[:punct:]所有标点符号
sed 的 command操作
command含义
p打印匹配行(和-n选项一起合用)
=显示文件行号
a\在定位行号后附加新文本信息
i\在定位行号后插入新文本信息
d删除定位行
c\用新文本替换定位文本
w filename写文本到一个文件,类似输出重定向 >
r filename从另一个文件中读文本,类似输入重定向 <
s使用替换模式替换相应模式
q第一个模式匹配完成后退出或立即退出
l显示与八进制ACSII代码等价的控制符
{}在定位行执行的命令组,用分号隔开
n从另一个文件中读文本下一行,并从下一条命令而不是第一条命令开始对其的处理
N在数据流中添加下一行以创建用于处理的多行组
g将模式2粘贴到/pattern n/
y传送字符,替换单个字符
sed 日常使用栗子

有这样一个实验的文本 test.txt

[root@cdh03 /opt]# cat test.txt
export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
export SCALA_HOME=/usr/local/scala-2.11.4

export PATH=$PATH:$SCALA_HOME/bin
export PATH=$PATH:/opt/gradle/gradle-4.10.2/bin
export PATH=$PATH:/usr/local/git/bin
export PATH=$PATH:/usr/local/python-3.5.3/bin

[root@cdh03 /opt]# 

直接指定行号打印
命令:sed ‘1p’ test.txt
在这里插入图片描述

加上-n 只打印匹配的行
命令:sed -n ‘1p’ test.txt
在这里插入图片描述
后面所有的栗子基本上是基于这个基本逻辑演变过来的,其实sed的模式匹配最终也是转换为对应行,然后进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值