1. 取系统ip

[root@oldboy logs]# ifconfig eth3
eth3 Link encap:Ethernet HWaddr 08:00:27:4C:6F:AD
inet addr:192.168.0.109 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:18603 errors:0 dropped:0 overruns:0 frame:0
TX packets:7782 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2652530 (2.5 MiB) TX bytes:1664897 (1.5 MiB)

解答:

方法1:sed 's#支持正则##g' file

# 第一步:取到ip所在的行,取第二行
[root@oldboy /]# ifconfig eth3|sed -n '2p'
inet addr:192.168.0.109 Bcast:192.168.0.255 Mask:255.255.255.0 # 第二步:取中间的内容,先将前面的一段匹配掉,替换掉
[root@oldboy /]# ifconfig eth3|sed -n '2p'|sed 's#inet addr:##g'
192.168.0.109 Bcast:192.168.0.255 Mask:255.255.255.0
# 取内容时,必须要在这行内容中是唯一的,不是唯一的,默认会取到最后一个
[root@oldboy /]# ifconfig eth3|sed -n '2p'|sed 's#^.*:##g'
255.255.255.0 # 将 以任意字符开头的,长度0-N个的,以dr: 为结尾的内容替换掉
[root@oldboy /]# ifconfig eth3|sed -n '2p'|sed 's#^.*dr:##g'
192.168.0.109 Bcast:192.168.0.255 Mask:255.255.255.0 # 第三步:将要取的ip内容的后端从开头取替换掉
[root@oldboy /]# ifconfig eth3|sed -n '2p'|sed 's#^.*dr:##g'|sed 's# B.*$##g'
192.168.0.109

处理技巧:

  1. 匹配需要的目标(获取的字符串,如本例中的ip)前的字符串一般用以...开头(^.*)来匹配开头,匹配的结尾写上实际的字符。

    • 如:"^.*addr:" 表达式就匹配" inet addr:"
  2. 而处理需要的目标后的内容,一般在匹配的开头写上实际的字符,而结尾是用以...结尾(.*$)来匹配。
    • 如:"Bcast:.*$"部分匹配表示"Bcast:10.0.0.255 Mask:255.255.255.0"
 

方法2:

  • 替换命令:sed -n 's#支持正则位置##gp' file

  • 指定行号:s前的2为 行号

    • sed -n '2s#支持正则位置##gp' file
[root@oldboy /]# ifconfig eth3|sed -n '2s#^.*dr:##gp'
192.168.0.109 Bcast:192.168.0.255 Mask:255.255.255.0 [root@oldboy /]# ifconfig eth3|sed -n '2s#^.*dr:##gp'|sed -n 's# Bc.*$##gp'
192.168.0.109

方法3:sed的后向引用 sed -nr 's#()()#\1\2#gp' file

测试和说明:

[root@oldboy /]# cat a.txt
I am oldboy Linux. # 取任意字符开头,取任意字符一直到m;然后()内容是要输出的内容,任意字符;后面是以"L"开头的任意字符(N个)结尾。
# 替换掉 () 外面的内容,输出()内的内容
[root@oldboy /]# sed -nr 's#^.*m (.*) L.*$#\1#gp' a.txt
oldboy

当正则匹配部分使用(),第一个括号,可以在后面的部分用“\1”来输出;第二个括号的内容,可以用"\2"来输出。

 

获取ip的方法:

# 取第二行,开头任意字符,是...r:()  Bc...,输出 () 的内容。
[root@oldboy /]# ifconfig eth3|sed -nr '2s#^.*r:(.*) Bc.*$#\1#gp'
192.168.0.109 # 第二行都不取,条件定义好,直接就能输出结果
[root@oldboy /]# ifconfig eth3|sed -nr 's#^.*r:(.*) Bc.*$#\1#gp'
192.168.0.109

方法4: 用awk,grep等文本处理方式分列获取,sed命令是用于学习的

[root@oldboy test]# ifconfig eth3|awk -F "[ :]+" 'NR==2 {print $4}'
192.168.0.109 [root@oldboy test]# grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth3|cut -d "=" -f 2
192.168.0.109

sed 方法替换的扩展练习:

1. 将下面文件的内容用sed替换方法取出 644:

[root@oldboy /]# stat /etc/hosts
File: `/etc/hosts'
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 259614 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-10-01 00:00:08.875025775 +0800
Modify: 2010-01-12 21:28:22.000000000 +0800
Change: 2019-08-30 08:12:59.831999996 +0800

答案:

[root@oldboy /]# stat /etc/hosts|sed -nr 's#^.*: \(0(.*)/-rw.*$#\1#gp'
644

2. 将下面文件内容的第一列和最后一列做个对调

[root@oldboy /]# tail /etc/passwd
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oldboy:x:500:500::/home/oldboy:/bin/bash
zoe:x:501:501::/home/zoe:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
beaty:x:502:502::/home/beaty:/bin/bash

答案:

正则表达式1:()()()三块分别借助单个匹配的特征,输出再拼接

[root@oldboy /]# tail /etc/passwd|sed -nr 's#(.*):x(.*):(.*)#\3:x\2:\1#gp'
/sbin/nologin:x:68:68:HAL daemon:/:haldaemon
/sbin/nologin:x:38:38::/etc/ntp:ntp
/sbin/nologin:x:499:76:Saslauthd user:/var/empty/saslauth:saslauth
/sbin/nologin:x:89:89::/var/spool/postfix:postfix
/sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd
/sbin/nologin:x:72:72::/:tcpdump
/bin/bash:x:500:500::/home/oldboy:oldboy
/bin/bash:x:501:501::/home/zoe:zoe
/sbin/nologin:x:48:48:Apache:/var/www:apache
/bin/bash:x:502:502::/home/beaty:beaty

正则表达式2:()()()三组分别匹配上内容

[root@oldboy /]# sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
...
/bin/bash:x:501:501::/home/zoe:zoe
/sbin/nologin:x:48:48:Apache:/var/www:apache
/bin/bash:x:502:502::/home/beaty:beaty

sed命令的正则表达式实践的更多相关文章

  1. 【文本处理命令】之sed命令详解

    sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...

  2. Sed 命令详解 正则表达式元字符

    1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...

  3. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  4. 掌握Sed命令

    带书签PDF版,喜欢的话,欢迎多提意见和建议,你的支持是血蝙蝠最大的前进动力! http://download.csdn.net/detail/challenge_c_plusplus/6480007 ...

  5. linux sed 命令 实现对文件的增删改替换查 实验

    1. 统一实验文本 # 创建包含下面内容的文件,后面的操作都会使用这个文件 [root@MongoDB ~]# cat person.txt ,mike,CEO ,jack,CTO ,yy,CFO , ...

  6. 无法绕开的cut, awk, sed命令

    linux命令的选项和选项后面的值的方式: 如果用 短选项, 选项值就放在短选项的后面, 如果用长选项, 值就用等于的方式. 最重要的是, 短选项后面的值, 跟短选项之间, 可以用空格, 也可以紧接着 ...

  7. 【三剑客】sed命令

    1. Sed 简介 sed 是Stream Editor(流编辑器)的缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行.   sed 是一种新型的,非交互式的编辑器. 它能执 ...

  8. 文本处理三剑客之sed命令

    第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...

  9. sed命令详解

    搜索 纠正错误  添加实例 sed 功能强大的流式文本编辑器 补充说明 sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时 ...

随机推荐

  1. PTA数据结构与算法题目集(中文) 7-20

    PTA数据结构与算法题目集(中文)  7-20 7-20 表达式转换 (25 分)   算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个 ...

  2. Git应用详解第二讲:Git删除、修改、撤销操作

    前言 前情提要:Git应用详解第一讲:Git分区,配置与日志 在第一讲中我们对Git进行了简单的入门介绍,相信聪明的你已经了解Git的基本使用了. 这一讲我们来进一步深入学习Git应用,着重介绍Git ...

  3. const不同位置带来的区别

    const不同位置带来的区别 今天同学问我数据结构时,我对以下代码懵了一下: template <class T> class Link{ public: T data; Link< ...

  4. Android 圆形图片库 CircleImageView

    高仿微信朋友圈 10s 视频裁剪 引语 晚上好,我是猫咪,我的公众号「程序媛猫咪」会推荐 GitHub 上好玩的项目,挖掘开源的价值,欢迎关注我. <Android 图片裁剪库 uCrop> ...

  5. redis 非关系型数据库

    redis 类型,数据存在磁盘里面,所以存储速度比较快,其他数据类型还是存储在数据库所以比较慢些 链接redis数据库: r=redis.Redis(host="%%%%%%%", ...

  6. Python爬虫系列(四):Beautiful Soup解析HTML之把HTML转成Python对象

    在前几篇文章,我们学会了如何获取html文档内容,就是从url下载网页.今天开始,我们将讨论如何将html转成python对象,用python代码对文档进行分析. (牛小妹在学校折腾了好几天,也没把h ...

  7. 视频图文教学 - 用最快的速度把 DotNet Core Blazor 程序安装到 树莓派中 并且用网页控制 GPIO 闪灯

    前言 dotnet core 在3.0时代已经发展得很好. 尤其是在跨平台方面更已经是达到了很实用的阶段. 作为 dotnet 程序员, 应该对 Linux 有充分的了解, 也可以在业余时间玩玩硬件, ...

  8. 选择IT行业的自我心得,希望能帮助到各位!(五)

    相信很多小伙伴,在看完之前的一二三四,也是我一路走来,走走停停,走走停停,有快乐,也有伤悲,毕竟这就是人生嘛,人生不起起伏伏怎么才能体验刺激的快感,也让我从一个小男孩净化成清高浮躁的青少年,在从而让我 ...

  9. 知识点一:OSI模型初识

    OSI(开放系统)模型是一组协议的集合,它使得两个不同的系统之间能够互相通信,分为七层 第一层:物理层 物理层负责把逐个的比特(01)从一个节点移动到下个节点 具体体现在如何把比特转换成电或者光信号. ...

  10. sqli-labs通关教程----31~40关

    第三十一关 这关一样,闭合变成(",简单测试,#号不能用 ?id=1") and ("1")=("1")--+ 第三十二关 这关会把我们的输 ...