首页 > 系统相关 >linux之sed

linux之sed

时间:2024-11-17 16:56:03浏览次数:1  
标签:bin sbin 37142518322922103X linux sed m01 root

sed

  • 参数
  • 取行

grep 参数

grep 参数选项
-v   # 取反
-r   # 递归过滤文件内容  从目录中递归查找 
-w   # 过滤的内容两边必须是空格
-E   # 支持扩展正则  egrep

-i   # 不区分大小写
-n   # 过滤到内容行号
-c   # 统计单词出现的次数
-o   # 匹配过程
-A   # 过滤到内容往下2行
-B   # 过滤到内容往上2行
-C   # 过滤到内容上下各2行

sed

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

sed 参数

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

语法格式:
		sed -n 'np' file  # n为数字  p为print输出结果		
参数选项:
	    -n   # 取消默认输出
	    -r   # 支持扩展正则
	    -i   # 修改源文件		

sed取行

# 打印第三行身份证号
[root@m01 ~]# sed -n '3p' id.txt 
赵 37142518322922103X

# 打印最后一行
[root@m01 ~]# sed -n '$p' id.txt 
赵 37142518322922103X

# 打印文件中第3-5行
[root@m01 ~]# sed -n '3,5p' id.txt 
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X

# 打印文件第6行到尾部
[root@m01 ~]# sed -n '6,$p' id.txt 
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X

# 打印第二行 ,第五行号
[root@m01 ~]# sed -n '2p;5p' id.txt 
夏 222113859123487192
赵 37142518322922103X

# 打印文本 带上行号
[root@m01 ~]# cat id.txt |grep -n .
1:孔 150000123874591242
2:夏 222113859123487192
3:赵 37142518322922103X
4:夏 222113859123487192
5:赵 37142518322922103X
6:夏 222113859123487192
7:赵 37142518322922103X
8:夏 222113859123487192
9:赵 37142518322922103X
10:赵 37142518322922103X
11:夏 222113859123487192
12:赵 37142518322922103X

sed模糊过滤查找内容

语法格式:
		grep 'root' passwd
		sed -n '/root/p' passwd # 模糊过滤查找包含root的行
		sed -n '//,//p'  passwd # 过滤区间范围的字符串 经常用来过滤日志中时间范围

匹配行

# sed -n '/root/p' == grep 'root'
[root@m01 ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@m01 ~]# 


# sed -n '//,//p' 取一段时间内的日志
sed -n '/14:05:27/,/16:12:57/p' /var/log/nginx/access.log

# 查看以r开头的行
[root@m01 ~]# sed -n '/^r/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash

# 查看以h结尾的行
[root@m01 ~]# sed -n '/h$/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
usera:x:1000:1000::/home/usera:/bin/bash

# 查看 以r开头 或者 以h结尾的行 
# sed -r参数扩展正则
[root@m01 ~]# sed -nr '/^r|h$/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
usera:x:1000:1000::/home/usera:/bin/bash

# 查看以a 或者 r开头的行号
[root@m01 ~]# sed -nr '/^[ar]/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin

[root@m01 ~]# sed -n '/nobody/,/ntp/p' /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin

sed删除

默认临时的输出到屏幕上不修改源文件
想要修改源文件需要加-i参数
语法结构:
		 sed '3d' # 指定删除第3行
		 sed '3,5d' # 区间范围删除
		 sed '/root/d' # 删除包含root的行
		 sed '/n$/d'   # 使用正则表达式

删除

[root@m01 ~]# cat id.txt 
孔 150000123874591242
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X

# 删除第3行号
[root@m01 ~]# cat id.txt |sed '3d'
孔 150000123874591242
夏 222113859123487192
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X

# 删除3-5行
[root@m01 ~]# cat id.txt |sed '3,5d'
孔 150000123874591242
夏 222113859123487192
夏 222113859123487192
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X

# 删除包含X的行
[root@m01 ~]# cat id.txt |sed '/X/d'
孔 150000123874591242
夏 222113859123487192
夏 222113859123487192
夏 222113859123487192
夏 222113859123487192
夏 222113859123487192

# 删除以2结尾的行号
[root@m01 ~]# cat id.txt |sed '/2$/d'
赵 37142518322922103X
赵 37142518322922103X
赵 37142518322922103X
赵 37142518322922103X
赵 37142518322922103X
赵 37142518322922103X

# 删除包含 1 2 9 7 0 的行
[root@m01 ~]# sed -r '/1|2|9|7|0/d' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin

sed之增加替换内容

sed之增加替换内容
sed '3a'  # 在第3行追加内容
sed '3i'  # 在第3行插入内容
sed '3c'  # 将第3行完全替换
sed '3w w.txt'  # 将第3行保存到新文件中
# 在第3行后插入
[root@m01 ~]# sed '3a hello' id.txt 
孔 150000123874591242
夏 222113859123487192
赵 37142518322922103X
hello

# 在第3行前插入
[root@m01 ~]# sed '3i hello' id.txt 
孔 150000123874591242
夏 222113859123487192
hello

# 将第3行替换
[root@m01 ~]# sed '3c hello' id.txt 
孔 150000123874591242
夏 222113859123487192
hello

# 将第17行进行替换
# sed '17c Port 22' /etc/ssh/sshd_config

# 将第3行写入到新的文件中
[root@m01 ~]# sed '3w w.txt' id.txt 
[root@m01 ~]# ls
1.txt  2.txt  anaconda-ks.cfg  doc  dr  id.txt  w.txt
[root@m01 ~]# 

# 将3-5行写入到w.txt中
[root@m01 ~]# sed '3,5w w.txt' id.txt 
[root@m01 ~]# cat w.txt 
赵 37142518322922103X
夏 222113859123487192
赵 37142518322922103X

sed 替换

语法格式:
		sed 's#替换谁#替换成谁#g' file
		sed 's///g' file
		sed 's@@@g' file
		sed 'sAAAg' file
# 将root 替换成ROOT
[root@m01 ~]# cat /etc/passwd |sed 's#root#ROOT#g'
ROOT:x:0:0:ROOT:/ROOT:/bin/bash

# 替换每行出现的第一个单词
cat /etc/passwd |sed 's#u#HELLO#'

# 替换文件中的: 为-
[root@m01 ~]# cat /etc/passwd |sed 's#:#-#g'
root-x-0-0-root-/root-/bin/bash
bin-x-1-1-bin-/bin-/sbin/nologin

# 将【:/】 替换成 -
[root@m01 ~]# cat /etc/passwd |sed -r 's#:|/#-#g'
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
lp-x-4-7-lp--var-spool-lpd--sbin-nologin

== 等同于 
[root@m01 ~]# cat /etc/passwd |sed 's#[:/]#-#g'
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

# 删除文件中的a-z
[root@m01 ~]# cat /etc/passwd |sed 's#[a-z]##g'
::0:0::/://
::1:1::/://
::2:2::/://

# 删除a-z之外的所有内容
[root@m01 ~]# cat /etc/passwd |sed 's#[^a-z]##g'
rootxrootrootbinbash
binxbinbinsbinnologin

# 按照字母排序统计
[root@m01 ~]# cat /etc/passwd |sed 's#[^a-z]##g' |grep . -o |sort |uniq -c |sort -rn |head
     86 n
     78 o
     66 s
     58 i
     41 b
     39 t
     38 a
     36 l
     35 e
     31 r
     
# 按照单词排序统计
[root@m01 ~]# cat /etc/passwd |sed 's#[:x0-9/-]# #g' |xargs -n1 |sort |uniq -c |sort -rn |head
     24 sbin
     18 nologin
      7 var
      6 bin
      4 root
      3 sync
      3 spool
      3 shutdown
      3 mail
      3 halt

sed模式+动作进行替换

  • 查找就等于模式 查找后的动作是输出p
# 将第4行的nologin替换为NOGLOGIN
[root@m01 ~]# cat /etc/passwd |sed '4s#nologin#NOGLOGIN#g'
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/NOGLOGIN

# 将第1行-3行的x替换成A
[root@m01 ~]# cat /etc/passwd |sed '1,3s#x#A#g'
root:A:0:0:root:/root:/bin/bash
bin:A:1:1:bin:/bin:/sbin/nologin
daemon:A:2:2:daemon:/sbin:/sbin/nologin

# 查找到包含root的行将x替换成X
[root@m01 ~]# cat /etc/passwd |sed '/root/s#x#X#g'
root:X:0:0:root:/root:/bin/bash

# 文件中test 替换成TEST 修改到文件 加-i参数
sed 's#test#TEST#g' -i /etc/passwd

# 将3-5行进行注释
[root@m01 ~]# cat /etc/passwd |sed '3,5s#^#\##g'
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
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

# 指定注释某行 查找root开头并注释该行
[root@m01 ~]# cat /etc/passwd |sed '/root/s#^#\##g'
#root:x:0:0:root:/root:/bin/bash

vim批量注释

ctrl+v 进入可视块模式
然后键盘上下键选择
选择后按大写的I 进入编辑模式
然后输入内容
完成后按两次ESC键即可

可视模式
按d 为删除

vim中替换动作
:s/root/ROOT/g  # 只替换光标所在行的所有root
:%s/root/ROOT/g # 将文件中所有的root替换成ROOT

sed后向引用

语法结构:
		 sed 's#(正则)#\1#g' # \1获取第一个括号中的内容 \2获取第2个括号中的内容
# 将想要的内容输出
[root@m01 ~]# echo helloworld |sed -r 's#(hello)world#\1#g'
hello

[root@m01 ~]# echo helloworld |sed -r 's#(hello)(world)#\1\2#g'
helloworld

[root@m01 ~]# echo helloworld |sed -r 's#(.*)(world)#\1#g'
hello

[root@m01 ~]# echo helloworld |sed -r 's#(h.*o)(rld)#\1#g'
hellowo


[root@m01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo

# 获取ip地址
[root@m01 ~]# ip a |sed -n '3p' |sed -r 's#(.*inet )(.*)(/)(.*)#\2#g'
127.0.0.1

# 批量添加用户
[root@m01 ~]# echo user{1..3} |xargs -n1 |sed -r 's#(.*)#useradd \1#g' |bash
useradd user1
useradd user2
useradd user3

# 批量修改密码
[root@m01 ~]# echo user{a..c} |xargs -n1 |sed -r 's#(.*)#useradd \1; echo 123456 |passwd --stdin \1#g' |bash

Changing password for user usera.
passwd: all authentication tokens updated successfully.
Changing password for user userb.
passwd: all authentication tokens updated successfully.
Changing password for user userc.
passwd: all authentication tokens updated successfully.

标签:bin,sbin,37142518322922103X,linux,sed,m01,root
From: https://www.cnblogs.com/sharecorner/p/18550753

相关文章

  • Linux基础+基本病毒编写
    **免责声明**学习视频来自B站up主泷羽sec,如涉及侵权马上删除文章。笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。B站地址:泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频一:opensslopenssl是一个开源的......
  • 网络安全之Linux基础
    目录文件管理创建空文件删除文件新建目录删除目录重命名文件移动文件软链接(SymbolicLink)硬链接(HardLink)搜索文件基本语法优点缺点基本语法常用选项示例注意事项功能基本语法常用选项示例输出解释注意事项功能基本语法常用选项示例输出解释注意......
  • 使用 ESP-IDF 进行esp32-c3开发第二步:Linux 和 macOS 平台工具链的标准设置
    先上文档,后面实践Linux和macOS平台工具链的标准设置[English]详细安装步骤请根据下方详细步骤,完成安装过程。设置开发环境以下是为ESP32-C3设置ESP-IDF的具体步骤。第一步:安装准备第二步:获取ESP-IDF第三步:设置工具第四步:设置环境变量第五步:开始使用ES......
  • WPF style BasedOn base style
    <Windowx:Class="WpfApp32.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • RAG (Retrieval-Augmented Generation) 与 iRAG (image based Retrieval-Augmented Ge
    RAG{Retrieval-AugmentedGeneration}与iRAG{imagebasedRetrieval-AugmentedGeneration}1.RAG(Retrieval-AugmentedGeneration,检索增强生成)1.1.LLM存在的问题1.2.RAG带来的好处1.3.RAG的工作原理1.4.检索增强生成和语义搜索2.iRAG(image......
  • 【Linux】信号
    文章目录概要整体架构流程信号的发送与接收信号的处理技术名词解释信号分析查看信号信号的产生方式键盘产生信号终端按键产生信号系统函数向进程发信号软件条件产生信号硬件异常产生信号信号处理函数忽略信号自定义处理函数信号的执行流程小结概要Linux信号是一......
  • 对比 win32 linux原生 和 qt 的 所有 socket api
    以下是Win32原生、Linux原生和Qt的SocketAPI对比,包括TCP和UDP的功能、特性及优缺点。我们从核心API、特性、性能和常见应用等方面进行分析。1.核心API对比1.1Socket创建与初始化操作Win32(原生)Linux(原生)Qt(跨平台)创建套接字socket()socket()......
  • ssh配置密钥登录linux
    1、生成sshkey示例ssh-keygen-trsa2、将生成的公钥内容拷贝到linux服务器的~/.ssh/authorized_keys如果是root用户,那就放在根目录的.ssh目录下,如果是其它用户,放置在用户目录的.ssh目录下3、在本机.ssh目录下,创建config文件,内容如下Hostdata01.rootHostNam......
  • 【Linux之权限】理论篇
    前言Linux的权限是我们学习Linux初期非常重要的基础知识,接下来我将通过一个系列【Linux之权限】,共三篇文章,对此进行较为全面和详细的解说。sudo情况:如果我们不是超级管理员,但是想执行一个权限级别比较高的指令,比如我们想以超级管理员的身份来创建一个文件,那么就:sudotou......
  • 这款信创CAD Linux与麒麟国产系统高效适配,荣获麒麟用户挚爱奖
    本文为CAD芯智库原创,未经允许请勿复制、转载!原文转自:www.xwzsoft.com/h-nd-493.html信创国产化发展至今已经陆续取得不少突破,作为工程建设/工业制造企业的核心设计/生产软件之一,CAD对国产信创操作系统、硬件设备的适配度发展也至关重要。对此,中望2016就开始投入CAD......