本文由 资源共享网 – ziyuan 发布,转载请注明出处,如有问题请联系我们!【Linux】sed 命令最全解析
收藏文章目录
一、sed 语法格式
参数选项
常见参数 | 说明 |
---|---|
-n | 抑制输出,结合p 指令打印特定行。默认sed会列出所有指定内容,加上 -n 参数后,则只有经过sed 特殊处理的那一行才会被列出来。 |
-i | 直接修改文件内容,而且不进行任何输出,慎用! 默认情况下 sed 并不直接修改文件内容,只是把结果进行标准输出,文件内容实际没有变化。 |
-e | 使用后面的动作指令编辑文件内容 |
-f | 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作; |
动作指令
常用动作 | 说明 |
---|---|
p | print,打印,列出指定的内容,通常与 -n 参数一起使用 |
a | after,新增,后面接字符串,并显示在新的一行(目前的下一行) |
i | insert,插入, 后面接字符串,并显示在新的一行(目前的上一行) |
c | change,替换一行或多行的整行内容,后面接字符串,用于取代 n1,n2 之间的行 |
s | supersede,stead,替换一行或多行中的部分内容,通常搭配正规表达式 常用方式: 1,20s/old/new/g |
d | delete,删除,后面通常不接任何字符 |
二、参数使用举例
1、输入文件的几种方式
2、-n 抑制输出
3、-i 修改文件内容且不进行输出
查看input文件原内容:
sed 不带 -i 参数时进行替换指令
sed -i 进行替换指令
sed -i 使用正则表达式匹配
4、-e 和 -f 指定脚本
4.1 语法:
4.2 下面几种示例是等价的:
4.3 使用 -e
实现多个匹配
三、各指令使用举例
1、p
打印某行
命令 | 说明 |
---|---|
sed ‘1p’ filename | 先打印第一行,然后再打印所有行 |
sed -n ‘1p’ filename | 打印第一行 |
sed -n ‘$p’ filename | 打印最后一行 |
sed -n ‘1,2p’ filename | 打印第一行到第二行 |
sed -n ‘2,$p’ filename | 打印第二行到最后一行 |
sed ‘/yuance/p’ filename | 先打印包含yuance 的行,再打印所有行 |
sed -n ‘/yuance/p’ filename | 打印包含yuance 的行 |
sed -n ‘/$/p’ filename | 打印包括关键字 $ 所在的行,使用反斜线 \ 屏蔽特殊含义 |
2、d
删除某行
命令 | 说明 |
---|---|
sed ‘3d’ filename | 删除第三行 |
sed ‘$d’ filename | 删除最后一行 |
sed ‘1,2d’ filename | 删除第一行到第二行 |
sed ‘2,$d’ filename | 删除第二行到最后一行 |
sed ‘/pattern/d’ filename | 删除包含pattern关键字的所有行 |
3、a
增加一行或多行字符串(在下一行)
命令 | 说明 |
---|---|
sed ‘1a drink tea’ filename | 第一行后增加字符串"drink tea" |
sed ‘1,3a drink tea’ filename | 第一行到第三行后增加字符串"drink tea" |
sed ‘$a drink bye’ filename | 最后一行后增加字符串"bye" |
sed ‘1a drink tea\nor coffee’ filename | 第一行后增加两行"drink tea"和"or coffee" |
sed ‘1a drink tea’ filename | 第一行后增加字符串"drink tea" |
4、i
插入一行或多行(在上一行)
5、c
对一行或多行进行整行替换
6、s
替换一行中的部分内容
6.1 格式 ‘s/xx/xx/g’:
命令 | 说明 |
---|---|
sed ‘s/cat/bird/g’ filename | 把文件中所有的’cat’替换成’bird’ |
sed ‘s/cat//g’ filename | 删除文件中所有的’cat’(替换为空即删除) |
sed ‘s/unix/linux/’ filename | 把每一行中的第 1 次出现的’unix’替换成’linux’ |
sed ‘s/unix/linux/3’ filename | 把每一行中的第 3 次出现的’unix’替换成’linux’ |
sed ‘s/unix/linux/4g’ filename | 把每一行中第 4 次开始到最后出现的’unix’全部替换成’linux’ |
sed ‘3 s/unix/linux/’ filename | 在’s’前加数字,可对指定行进行替换。 把第 3 行中第一次出现的’unix’替换成’linux’。 |
sed ‘3,7 s/unix/linux/’ filename | 在’s’前也可以加数字范围,对多行进行替换。 把第 3-7 行中第一次出现的’unix’替换成’linux’。 |
sed ‘3,$ s/unix/linux/’ filename | 把第 3行至结尾行每行第一次出现的’unix’替换成’linux’。 |
nl filename | sed -n ‘7 s/unix/linux/p’ | 把第 7 行中第一次出现的’unix’替换成’linux’,并把替换后的第7行打印出来。 若加了 -n 不加的后面的 p ,则替换后不打印。 |
6.2 匹配字符串中使用正则表达式
原字符串 | 命令 | 匹配结果 |
---|---|---|
inet addr:192.168.1.100 | sed 's/^.*addr://g’ | 192.168.1.100 |
192.168.1.100 Bcast:192.168.1.255 | sed 's/Bcast.*$//g’ | 192.168.1.100 |
hello world | sed 's/^/#/g’ | #hello world ,即在每行开头加上 # |
hello world | sed 's/$/—/g’ | hello world--- ,即在每行最后加上 — |
6.3 替换匹配行中的某个字符串
技术文章资源(【Linux】sed 命令最全解析)网址:https://www.08i8.com/course/detail524.html;转载请注明!