首页 > 其他分享 >sed命令

sed命令

时间:2024-11-13 20:31:20浏览次数:1  
标签:kylin passwd 命令 sed adm root xu

sed

作用:

1.取行
2.删除行
3.替换行
4.增加内容
5.后向引用

语法结构:
sed '模式+动作' file # 直接处理文件 效率比较高
cat file|sed '模式+动作' # 效率较低
其他命令的结果|sed 对显示到屏幕上的内容进行处理
模式: 找谁,按照行 模糊过滤查找文件内容
动作: 找到后干啥 显示 删除 替换 增加内容

【1】、sed查找功能

1、sed按照指定行查找

语法格式:
		sed -n 'np' file  # n为数字  p为print输出结果
参数选项:
	    -n   # 取消默认输出
	    -r   # 支持扩展正则
	    -i   # 修改源文件
案例1:只显示文件中的第三行
[root@kylin-xu ~]# sed -n '3p' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin

案例2:显示文件的最后一行
[root@kylin-xu ~]# sed -n '$p' passwd 
operator:x:11:0:operator:/root:/sbin/nologin

案例3:显示文件中的第3-第5行,使用逗号进行分隔
[root@kylin-xu ~]# sed -n '3,5p' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

案例4:显示文件第6行到最后一行
[root@kylin-xu ~]# sed -n '6,$p' 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
operator:x:11:0:operator:/root:/sbin/nologin

案例5:查看/分区使用情况
[root@kylin-xu ~]# df -Th  | sed -n '6p'
/dev/mapper/klas-root   xfs        39G  3.7G   35G   10% /

2、模糊过滤查找内容

语法格式
		sed -n '/过滤内容/动作' filename
参数:	
		-r:支持扩展正则
案例1:查找包含root的行
[root@kylin-xu ~]# sed -n '/root/p' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

案例2:查找以root开头的行
[root@kylin-xu ~]# sed -n '/^root/p' passwd 
root:x:0:0:root:/root:/bin/bash

案例3:查找以bash结尾的行
[root@kylin-xu ~]# sed -n '/bash$/p' passwd 
root:x:0:0:root:/root:/bin/bash

案例4:查找以r开头或者h结尾的行
[root@kylin-xu ~]# sed -n '/b$|^r/p' passwd  -r
root:x:0:0:root:/root:/bin/bash

案例5:以r或a开头的行
[root@kylin-xu ~]# sed -n '/^[ar]/p' passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin

案例6:查找以bin开头的行到以adm开头的行,通过模糊匹配实现查找一段范围的行
[root@kylin-xu ~]# sed -n '/^bin/,/^adm/p' passwd 
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

$ 注意:如果有多个满足结尾匹配的行,那么只匹配到第一个
[root@kylin-xu ~]# cat 1.txt 
root xxxxxxxxxxxxxxxxx
123
adm qqqqqqqqqqqqqqqqqqqqqqqq
old cccccccccc
test uuuuuuuuuuu
adm oooooooooooooo
22222222222222
[root@kylin-xu ~]# sed -n '/^root/,/^adm/p' 1.txt 
root xxxxxxxxxxxxxxxxx
123
adm qqqqqqqqqqqqqqqqqqqqqqqq
$如果找不到结尾则一直输出到文章结尾
[root@kylin-xu ~]# sed -n '/^root/,/^sasdasd/p' 1.txt 
root xxxxxxxxxxxxxxxxx
123
adm qqqqqqqqqqqqqqqqqqqqqqqq
old cccccccccc
test uuuuuuuuuuu
adm oooooooooooooo
22222222222222

【2】、sed删除功能

语法结构:
		sed '3d' filename
		sed '/过滤内容/d' filename
		sed '/正则表达式/d' filename
		sed '//,//d' filename
		默认临时的输出到屏幕上不修改源文件
	    想要修改源文件需要加-i参数
案例1:删除第三行,并不是真实删除
[root@kylin-xu ~]# sed  '3d' 2.txt 
11111
22222
44444
55555
[root@kylin-xu ~]# cat 2.txt 
11111
22222
33333
44444
55555

案例2:真实删除源文件的第三行
[root@kylin-xu ~]# sed  '3d' 2.txt  -i 
[root@kylin-xu ~]# cat 2.txt 
11111
22222
44444
55555

案例3:删除2-4行
[root@kylin-xu ~]# sed '2,4d' 2.txt 
11111
55555

案例4:删除root开头的行
[root@kylin-xu ~]# sed '/^root/d' passwd 

案例5:删除以n结尾的行
[root@kylin-xu ~]# sed '/n$/d' passwd

案例6:删除以root开头的行到以adm开头的行
[root@kylin-xu ~]# sed '/^root/,/^adm/d' passwd 

案例7:删除root或adm开头的行
[root@kylin-xu ~]# sed '/^adm|^root/d' passwd -r

笔试题 查找/删除日志中的时间范围

 cat /var/log/secure  | sed '/^Nov  6 00:05:07/,/^Nov  6 14:46:58/d'

【3】、sed修改功能

sed '3a'  # 在第3行追加内容
sed '3i'  # 在第3行插入内容
sed '3c'  # 将第3行完全替换
sed '3w w.txt'  # 将第3行保存到新文件中
案例1:在第3行的下面插入test
[root@kylin-xu ~]# sed '3a test' 2.txt 
11111
22222
33333
test
44444
55555

案例2:在第三行插入hahaha
[root@kylin-xu ~]# sed '3i hahaha' 2.txt 
11111
22222
hahaha
33333
44444
55555

案例3:将第三行完全替换位xixixi
[root@kylin-xu ~]# sed '3c hahaha' 2.txt 
11111
22222
hahaha
44444
55555

案例4:修改sshd配置文件,修改端口号
[root@kylin-xu ~]# sed '17c Port 123' /etc/ssh/sshd_config -i 
[root@kylin-xu ~]# grep "Port" /etc/ssh/sshd_config 
Port 123
#GatewayPorts no
GatewayPorts no

案例5:修改selinux配置文件
[root@kylin-xu ~]# sed '/^SELINUX=/c SELINUX=permissive' /etc/selinux/config 

案例6:将第三行保存到新文件
[root@kylin-xu ~]# sed '3w w.txt' 2.txt 
11111
22222
33333
44444
55555
[root@kylin-xu ~]# cat w.txt 
33333

【4】、sed替换功能

语法格式:
		sed 's#替换谁#替换成谁#g' file
		sed 's///g' file
		sed 's@@@g' file
		sed 'sAAAg' file
案例1:将root替换成heihei
 sed 's/root/heihei/g' passwd 
 
案例2:替换每行出现的第一个单词
sed 's#root#heihei#' passwd 

案例3:替换文件中的:为-
sed 's#:#-#g' passwd 

案例4:将:替换为空格
sed 's#:# #g' passwd 

案例5:替换文件中的:和/ 为空格
sed 's#:|/# #g' passwd  -r
 sed 's#[:/]# #g' passwd  
 
案例6: 替换文件中的a-Z为空格
[root@kylin-xu ~]# sed 's#[a-z]# #g' passwd  -r
    : :0:0:    :/    :/   /    
   : :1:1:   :/   :/    /       
      : :2:2:      :/    :/    /       
   : :3:4:   :/   /   :/    /       
  : :4:7:  :/   /     /   :/    /       
    : :5:0:    :/    :/   /    
        : :6:0:        :/    :/    /        
    : :7:0:    :/    :/    /    
    : :8:12:    :/   /     /    :/    /       
    : :11:0:        :/    :/    /    
    
    
案例7:删除a-z之外的所有内容
[root@kylin-xu ~]# sed 's#[^a-z]# #g' passwd  -r

案例8:查询/etc/passwd文件中子母出现的次数
[root@kylin-xu ~]# sed 's#[^a-Z]##g' /etc/passwd | grep . -o | sort | uniq -c | sort -rn 

模式+动作进行替换

查找就等于模式 查找后的动作是输出p
[root@oldboyedu ~]# sed -n '4p' passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
将p动作修改为替换的动作
案例1:将第四行的nologin替换为bash
sed '4s#nologin#bash#g' passwd 

案例2:将3-6行的x替换为A
sed '3,6s#x#A#g' passwd

案例3:查找包含root的行,将x替换为D
sed '/root/s#x#D#g' passwd

面试题:

将文件中的test替换为haha
sed 's#test#haha#g' -i

将3-5行进行注释
sed '3,5s/^/#/g' passwd

指定注释某行,注释adm开头的行
sed '/^root/s/^/#/g' passwd 


【5】、sed后向引用

语法结构:
		 sed 's#(正则)#\1#g' # \1获取第一个括号中的内容 \2获取第2个括号中的内容
案例1:将想要的内容输出
[root@kylin-xu ~]# echo old test | sed 's#(old)( )(test)#\3\2\1#g' -r
test old

案例2:获取IP
ifconfig ens33 | sed '2p' -n | sed 's#(.*inet )([0-9.]+ )(.*)#\2#g' -r
192.168.121.99 

案例3:创建用户
[root@kylin-xu ~]# echo test{1..3} | xargs -n1 | sed 's#(.*)#useradd \1#g' -r | bash
[root@kylin-xu ~]# id test1 test2 test3
用户id=12309(test1) 组id=12309(test1) 组=12309(test1)
用户id=12310(test2) 组id=12310(test2) 组=12310(test2)
用户id=12311(test3) 组id=12311(test3) 组=12311(test3)

扩展: 给每个用户配置密码

[root@kylin-xu ~]# echo test{1..3}| xargs -n1 | sed 's#(.*)#useradd \1 ;echo 0207xrzh! | passwd --stdin \1#g' -r | bash
useradd:用户“test1”已存在
更改用户 test1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 test2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 test3 的密码 。
passwd:所有的身份验证令牌已经成功更新。

标签:kylin,passwd,命令,sed,adm,root,xu
From: https://www.cnblogs.com/xuruizhao/p/18544742

相关文章

  • [ Linux 命令基础 ] Linux 命令大全-命令前置知识-系统管理-文件和目录管理-文本处理
    ......
  • NIZK零知识证明-Groth10-Short Pairing-based Non-interactive Zero-Knowledge Argume
    点个关注吧谢谢!有需要论文知道、审稿,申博资料准备,答辩等的可以私信前序文章见:一;二。五、CommonReferenceString公共字符串设定q=n......
  • shell正则表达式、sed基本用法及sed应用案例
    一、正则表达式●可以使用若干符号配合某工具对字符串进行增删改查操作1.1基本正则列表正则符号描述^匹配行首$匹配行尾[]集合,匹配集合中任意单个字符[^]对集合取反.匹配任意字符*匹配前一个字符任意次数【*不允许单独使用】\{n,m}匹配......
  • 管道符 (|) 是 Unix/Linux 系统中用于将一个命令的输出传递给另一个命令作为输入的符
    一、管道符管道符(|)是Unix/Linux 系统中用于将一个命令的输出传递给另一个命令作为输入的符号。它是命令行和shell脚本中非常常用的工具,允许你将多个命令链接在一起,形成数据处理管道。1、管道符的用法最基本的用法是将一个命令的输出传递给另一个命令。例如,以下命令将l......
  • linux 命令值xargs与tr
    管道符 | 允许将一个命令的输出作为另一个命令的输入。然而,管道符在处理某些类型的输入时存在局限性,特别是当需要将一系列输入项作为单个命令的多个参数时()。xargs 的出现正是为了解决这个问题。xargs 能够从标准输入(stdin)读取数据,并将这些数据转换为特定命令的参数列表。这......
  • 在 Windows 系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的 split
    在Windows系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的split命令(类似于Linux中的split命令),但可以通过一些其他方式实现这一功能。以下是一些常用方法:1.使用 fsutil 命令分割大文件fsutil是Windows提供的一个工具,可以用于管理文件系统,但并不直......
  • Linux之运维命令
    查看日志1、系统今日小于warning级别的日志manjournalctl|grep-C2"debug"|journalctl-xenall--sincetoday-pwarning[-ojson|-ojson-pretty]2、系统启动日志、内核日志#启动journalctl-b[-0]#内核journalctl-k3、指定服务或进程最新日志#......
  • SUSE Linux 里一些常用的命令
    在SAPBusinessoneversionforHANA中经常用到的一些命令。重启HANA数据库的服务:用putty或者直接登录suse服务器,打开命令行,先登录数据库用户,如果当时HANA数据库安装使用的是ndb,那对应的就是su-ndbadm--先登录对应的数据库用户su-ndbadm--然后重启数据库服务./H......
  • 走进科学IT版:两个控制台窗口,一个python命令报错一个不报错
    真是碰到走进科学那样的灵异事件了,同一个目录下,一样的python环境,一样pyramid的服务,两个控制台窗口,一个终端可以启动,另一个终端就启动不了。都是这一条命令pythonpyramid_app.py不能启动的终端,报错:pythonpyramid_app.pyTraceback(mostrecentcalllast):File"/User......
  • Linux学习,clear命令
    Linuxclear命令在Linux和类Unix操作系统中用于清除终端屏幕上的所有内容,使终端看起来像是刚刚打开的一样。这个命令不会删除终端的历史记录或当前正在运行的命令,只是简单地清除屏幕上的显示内容。命令使用:在终端中输入 clear 并按下回车键即可执行该命令。注意事项:......