Linux基础(day29)

sed扩展

例如:有个文件test的内容如下:
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
怎么能截取
[abcfd]
123
324
444
[rty]
这一部分出来呢?
  • 实现:
[root@hf-01 sed]# sed -n '/\[abcfd\]/,/\[rty\]/'p 1.txt    //截取[abcfd]到[rty]之间的内容
[abcfd]
123
324
444
[rty]
[root@hf-01 sed]# 
  • 这里不能加-r 参数,只能使用 \ 脱义字符(有可能是逗号 , 的存在,导致加-r 参数无法正常全部脱义)
  • 扩展知识
    • 查看某一段时间的日志
      • sed -n '/03/Mar/2016:02:52/,/03/Mar/2016:03:03:20/'p /usr/local/nginx/logs/cn.log |awk '{print $1}'|sort|uniq -c|sort -rn
  • 二. sed转换大小写
    1. 把每个单词的第一个小写字母变成大写
[root@hf-01 sed]# sed 's/\b[a-z]/\u&/'g  test.txt    //把每个单词的第一个小写字母变成大写
Root:X:0:0:Root:/Root:/Bin/Bash
Bin:X:1:1:Bin:/Bin:/Sbin/Nologin
Adas:124:Bdsf:Rto:Pass
Daemon:X:2:2:Daemon:/Sbin:/Sbin/Nologin
Dfdf:Rggo:124
等等等,只截取了一部分
[root@hf-01 sed]#
  1. 把所有小写变成大写
[root@hf-01 sed]# sed 's/[a-z]/\u&/'g test.txt    //把文件中所有小写字母变成大写
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
ADAS:124:BDSF:RTO:PASS
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
DFDF:RGGO:124
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
等等等,只截取了一部分
[root@hf-01 sed]#
  • 在使用-i 参数后,会直接更改文件内容
    • sed -i 's/[a-z]/\u&/'g test.txt
    1. 大写变小写
[root@hf-01 sed]# sed 's/[A-Z]/\l&/'g test.txt    //把文件中所有的大写字符变成小写
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adas:124:bdsf:rto:pass
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dfdf:rggo:124
等等等,只截取了一部分
[root@hf-01 sed]#

总结

[root@hf-01 sed]# head -n1 test.txt |sed 's/\(^r.*\)/\1 12/'    //在以r 字母开头的行,结尾处添加数字123
root:x:0:0:root:/root:/bin/bash 12
[root@hf-01 sed]# head -n1 test.txt |sed 's/\(^r.*\)/& 123/'    //在以r 字母开头的行,结尾处添加数字123
root:x:0:0:root:/root:/bin/bash 123


[root@hf-01 sed]# head -n1 test.txt |sed 's/\(^r.*\)/1 123/'    //这里是将以r 字母开头的行,替换成1 123
1 123
  • 这里的 \1 应该指的是前面 // 的内容
  • & 表示 第一个 // 里面的内容
  • 扩展知识
    • 在含有root行前面添加字符abc字符串和一个空格
      • sed '/root/s/^/abc /' test.txt
    • 在以第一个root开头的行到以一个bin开头的行的后面添加abc和空格
      • sed '/^mail>/,/^ftp>/s/$/ abc/' test.txt
  • 四. 删除某行到最后一行
  • sed删除某关键字的下一行到最后一行
    • 格式 sed -i '/sample/{N;d}' filename
      • //sample是匹配字符
      • N在这里就是下一行
      • d是删除
    • 需求
[root@test200 ~]# cat test
a
b
c
d
e
f
[root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test
a
b
c
  • 分析
    • 首先匹配,匹配到c这行
    • 后面定义一个标签,开始循环,下一行一直到结尾都放到模式空间(缓冲区)
    • 然后删除模式空间,打印出结果
      • if 匹配"c"
      • :a
      • 追加下一行
      • if 不匹配"$"
      • goto a
      • 最后退出循环,d命令删除。
  • 五. 打印1到100行含某个字符串的行
  • 使用sed打印1到100行包含某个字符串的行
sed  -n '1,100{/abc/p}'  1.txt
  • 指定多个字符
sed -n  '1,100{/abc/p;/dd/p}' 2.txt 
  • sed -n :不重复打印
  • -n和p参数一起使用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go语言学习之cgo(golang与C语言相互调用)

几乎所有的编程语言都有C语言的影子,当然golang也不例外。可以看到golang的创始者们与c language有着密切的联系。所有,golang和c语言的相...

5887
来自专栏ml

C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 /* 举列子说明什么是...

2915
来自专栏极乐技术社区

使用ES6新特性开发微信小程序(1)

ECMAScript 6(简称ES6)是JavaScript语言的最新标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。 ...

2275
来自专栏天天

Airbnb JavaScript Style Guide

const foo = 1; let bar = foo; bar = 9; console.log(foo, bar); // => 1, 9

1892
来自专栏杂烩

使用javascript让项目支持热插拔 原

    突然想起之前做过的一个小项目,项目虽小,需求却不小,要求解析特定格式的字符串,并且特定格式并非一成不变,想要一套系统能够支持解析多变的规则且更改规则时不...

1762
来自专栏java达人

js的回调函数详解

在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用。既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递...

3615
来自专栏Android机动车

Java 基础(六)——集合源码解析 Queue

Queue继承自 Collection,我们先来看看类结构吧,代码量比较少,我直接贴代码了。

741
来自专栏racaljk

Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)

给一串包含数字的加密报文,求有多少种解码方式 举个例子,已知报文"12",它可以解码为AB(1 2),也可以是L (12) 所以解码方式有2种。

1151
来自专栏静晴轩

JavaScript 之 this 详解

JavaScript作为一种脚本语言身份的存在,因此被很多人认为是简单易学的。然而情况恰恰相反,JavaScript支持函数式编程、闭包、基于原型的继承等高级功...

4475
来自专栏racaljk

go defer (go延迟函数)

Go语言的defer算是一个语言的新特性,至少对比当今主流编程语言如此。根据GO LANGUAGE SPEC的说法:

953

扫码关注云+社区

领取腾讯云代金券