首页 > 其他分享 >sed 命令与正则表达式

sed 命令与正则表达式

时间:2024-08-08 23:26:20浏览次数:8  
标签:nl regular 正则表达式 express 命令 sed txt inet

sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都会被打印到屏幕上。

sed 编辑器逐行处理文件(或输入),并将结果打印到屏幕上。

具体过程如下:首先 sed 把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。

sed 每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed 便结束运行。sed 把每一行都存在临时缓冲区中,对这个副本进行编辑,所以直接使用不会修改原文件内容。

如果要修改原文件,需要添加 -i 选项。

输出文件内容

将 regular_express.txt 的内容列出并打印行号,并将 2-5 行删除显示:

nl regular_express.txt | sed '2,5d'

2,5d 表示删除 2~5 行,d 即为 delete。

3-3-0

同理,删除第 2 行:

nl regular_express.txt | sed '2d'

删除第三行到最后一行, $ 表示定位到最后一行:

nl regular_express.txt | sed '3,$d'

使用 -i 在原文件中删除第 1 行:(注意:该指令会修改原文件)

sed -i '1d' regular_express.txt

使用 a 和 i 新增输出

在第二行后添加字符串 test:

nl regular_express.txt | sed '2a test'

3-4-0

在第二行前添加字符串 test:

nl regular_express.txt | sed '2i test'

在第二行后添加两行 test,\n 表示换行符:

nl regular_express.txt | sed '2a test\ntest'

行内容替换

将 2-5 行的内容替换为 No 2-5 number,c 为替换内容选项:

nl regular_express.txt | sed '2,5c No 2-5 number'

3-5-0

输出指定行

输出 regular_express.txt 的第 5-7 行,其中 -n 为安静模式选项,我们在前面的章节中已经介绍过。

执行以下两条命令可以明显看出区别:

nl regular_express.txt |sed -n '5,7p'
​
nl regular_express.txt |sed  '5,7p'

3-6-0

字符串替换

格式为:sed 's/lodstr/newstr/g'

来看一个实例。首先查看本机 IP 地址:

ifconfig eth0

字段inet 地址:192.168.x.x即为本机的 IP 地址,这是经由 NAT 转换后分配的内网 IP 地址,在此不做展开。若想进一步学习计算机网络的相关知识可以参阅 TCP/IP 网络协议基础入门

之后使用 grep 指令在 ifconfig eth0 的结果中查找 inet,并打印至终端:

ifconfig eth0 | grep 'inet'

可以使用字符串替换功能将 IP 前面的部分予以删除,按照思路,也就是将 inet 地址: 替换为空字符串,可以简单写成:

ifconfig eth0 | grep 'inet '| sed 's/inet 地址://g'

(注意中文字符不能直接复制,需要自己在终端输入)

但正则表达式在实际应用中可以非常灵活,回想一下我们在前两节所学的关于正则表达式的知识(忘了也不要紧,可以随时返回查看)。

. 表示任意一个字符,* 表示重复字符,{ } 表示限定连续字符范围,所以正则表达式也可以写成:

ifconfig eth0 |grep 'inet '| sed 's/.inet...://g'
# 或者
ifconfig eth0 |grep 'inet '| sed 's/.\{0,9\}://'

表达式的写法并不唯一,在此也并未全部列出,大家亦可自行尝试使用其他写法,欢迎在评论区中讨论。

将 IP 后面的部分删除:

/sbin/ifconfig eth0 |grep 'inet '| sed 's/.inet...://g'| sed 's/..:.*$//g'
​
/sbin/ifconfig eth0 |grep 'inet '| sed 's/.inet...://g'| sed 's/.\{0,3\}:.*$//g'

3-7-0

上述指令是比较复杂的正则表达式运用,熟悉正则表达式后可以明显地简化指令,简单便捷地完成文件的查询、修改等任务。

标签:nl,regular,正则表达式,express,命令,sed,txt,inet
From: https://blog.csdn.net/cdxgwhj/article/details/141020123

相关文章

  • 命令行参数、环境变量详解
    目录一、命令行参数:二、环境变量PATH1、理解什么是环境变量2、常见环境变量和操作3、整体理解环境变量,系统,程序4、如何获取环境变量(c语言)(1)getenv()函数(2)使用externchar**environ5、内建命令特点和用法一、命令行参数:我们常写的main函数是可以带参数的int......
  • SVG之path详解(一),全面解析椭圆弧命令A
    简述SVG中的<path>元素用于创建路径,它是SVG中最强大和最灵活的基本形状之一使用<path>元素可以绘制直线、曲线、弧线等各种复杂的图形,并且可以通过设置路径命令来控制路径的形状和样式在进入正题前,先温习一下svg的坐标系,x轴为水平向右,y轴为垂直向下基本语法<path......
  • Java方法04:拓展命令行传参
    有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。命令行参数是在执行程序时候紧跟在程序名字后面的信息。【下面的程序打印所有的命令行参数】publicclassCommandLine{ publicstaticvoidmain(Stringargs[]){ for(inti=0;i<arg......
  • Linux系统中的find命令
    Linux系统中的find命令1.find命令的基本语法其中:路径:指定要搜索的目录。选项:指定搜索参数,如时间、用户、文件类型等。表达式:指定搜索条件,如文件名、大小、权限等。动作:指定对找到的文件执行的操作,如打印、删除、复制等。2.查找文件名称查找精确匹配文件名:-name"文件......
  • 好用的命令(自用)
    1.nethogs    2.nload   ......
  • key命令操作
    key命令操作查询###查看所有keykeys*###匹配查看*keyssit*###单个字符匹配?keyssit?###可选匹配[]keyssit[e|y]判断KEY类型###随机返回一个KEYrandomkey###判断key是否存在(0|1)existssite#1表示存在0表示不存在###返回KEY的类型typesite......
  • Linux 硬件相关命令
    ※,Linux性能分析:https://www.cnblogs.com/bakari/p/10515977.html★,之CPU篇:cpu个数、核数、线程数是cpu的三个重要概念。一般个人PC上只有一个物理cpu,服务器上可以有多个物理cpu。一个物理cpu可以有多个核(比如4核,8核等等);一个物理核可以使用超线程技术超出多个虚拟核(即线程),一般是......
  • GIT常用命令
     gitbranch查看本地所有分支gitstatus查看当前状态gitcommit提交gitbranch-a查看所有的分支gitbranch-r查看本地所有分支gitcommit-am"init"提交并且加注释gitremoteaddorigin地址gitpushoriginmaster将文件给推到服务器上gitremoteshow......
  • 一个大坑!使用Jmeter5.X通过命令行方式运行脚本,可能会出现samples数量统计翻几倍的情况
    最近使用Jmeter5.4.1进行了接口测试,发现了一个诡异的问题,在这里跟大家分享一下这个问题从debug到解决的过程,避免大家踩坑!诡异问题记录通过命令行运行jmeterjmeter-n-tC:\Users\XK-ADMIN\Desktop\test.jmx -lC:\software\result1.jtl-e-oC:\software\result1测试......
  • Linux shell脚本案例:使用正则表达式匹配目录并定时删除日期早于当前系统日期的所有目
    实现每周三和每周日执行清理/NFS目录的任务,你可以使用shell脚本结合cron定时任务。下面是一个示例脚本,它会删除/NFS目录下所有名称形如XBK_FULL_YYYYMMDDHHMMSS和XBK_INCR_YYYYMMDDHHMMSS的目录,其中日期早于当前系统日期。步骤1:创建Shell脚本创建脚本......