ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

sed 命令详解

2022-08-11 00:05:31  阅读:172  来源: 互联网

标签:bin sbin etc passwd 命令 sed root 详解


sed命令详解

sed命令的选项(option):

-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容

sed -n 'p' 打印行数 p前面定义行数 '1,3p'打印1到3行 '3p'打印3行 '/匹配项/p' 打印匹配字串

打印1到3行

[root@shell-test log]# sed -n '1,3p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

打印第3行

[root@shell-test log]# sed -n '3p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

打印匹配root的行

[root@shell-test log]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

打印匹配字串root行到第4行

[root@shell-test log]# sed -n '/root/,4p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

打印两个匹配字串例如root和loo之间的行 也可以打印时间范围

[root@shell-test log]# sed -n '/root/,/loop/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
....
yyx:x:1000:1000::/home/yyx:/bin/bash
loop:x:1001:1001::/home/loop:/bin/bash

打印取反,匹配字串行取反 {=;p}会打印行号

[root@shell-test log]# sed -n '1,5!{=;p}' /etc/passwd
6
sync:x:5:0:sync:/sbin:/bin/sync
7
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8
halt:x:7:0:halt:/sbin:/sbin/halt
[root@shell-test log]# sed -n '1,5!p' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

删除1,5行

sed '2,5d' datafile

删除匹配字串到第二次匹配字串的行

sed '/loot/,/loop/d /etc/passwd'

删除匹配字串到第十行

sed '/loop/,10d' /opt/test.txt

正则表达式常用方法介绍

正则表达式 说明
^ 锚点行首的符合条件的内容,用法格式"^pattern"
$ 锚点行首的符合条件的内容,用法格式"pattern$"
^$ 空白行
. 匹配任意单个字符
* 匹配紧挨在前面的字符任意次(0,1,多次)
.* 匹配任意长度的任意字符
\? 匹配紧挨在前面的字符0次或1次
\{m,n\} 匹配其前面的字符至少m次,至多n次
\{m,\} 匹配其前面的字符至少m次
\{m\} 精确匹配前面的m次{0,n}:0到n次
\< 锚点词首相当于 \b,用法格式:<pattern
\> 锚点词尾,用法格式:>pattern
\<pattern\> 单词锚点
\(..\) 分组,用法格式:\(pattern\),引用\1,\2
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:digit:] 所有数字, 相当于0-9, [0-9]---> [[:digit:]]
[:lower:] 所有的小写字母
[:upper:] 所有的大写字母
[:alpha:] 所有的字母
[:alnum:] 相当于0-9a-zA-Z
[:space:] 空白字符
[:punct:] 所有标点符号
sed -n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接一个t字符的行  
sed -n '/.r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符  
sed -n '/o*/p'/etc/passwd#打印o字符重复任意次  
sed -n '/o\{1,\}/p'/etc/passwd#打印o字重复出现一次以上  
sed -n '/o\{1,3\}/p'/etc/passwd#打印o字重复出现一次到三次之间以上

sed编辑命令

参数 说明
p 打印匹配行(和-n选项一起合用)
= 显示文件行号
a|在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
w filename 写文本到一个文件,类似输出重定向 >
r filename 从另一个文件中读文本,类似输入重定向 <
s 使用替换模式替换相应模式
q 第一个模式匹配完成后退出或立即退出
l 显示与八进制ACSII代码等价的控制符
{} 在定位行执行的命令组,用分号隔开
n 从另一个文件中读文本下一行,并从下一条命令而不是第一条命令开始对其的处理
N 在数据流中添加下一行以创建用于处理的多行组
g 将模式2粘贴到/pattern n/
y 传送字符,替换单个字符

sed -n '/^#/!p' /etc/nginx/conf/nginx.conf 表示取不是#号的行        
sed -n '/^#/!{/^$/!p}' /etc/nginx/conf/nginx.conf 表示取不是#号开头和空行的行  
sed -e '/^#/d' -e '/^$/d' /etc/nginx/conf/nginx.conf 表示删除#号开头的行和空行 -e 是执行多重任务 
sed -n '1,/loop/p' /etc/passwd 打印第一行到loop行  
sed -n '/loop/,4p' /etc/passwd 打印loop到第四行  
sed -i '1 i/lool/' /opt/test.txt
sed 's@loop@lood@' /opt/test.txt 替换第一次出现的loop为lood
sed 's@loop@lood@2g' /opt/test.txt 替换前两行
sed 's@loop@lood@'g /opt/test.txt 替换所有loop为lood
 

标签:bin,sbin,etc,passwd,命令,sed,root,详解
来源: https://www.cnblogs.com/niguding/p/16574350.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有