实验楼--第十三章_sed额外总结

实验楼有关sed讲的真的好少,后面又去补了一下它推荐的教程
sed简明教程

什么是sed?

个人觉得学习一门知识,首先要清楚地知道它的最简明扼要地一个定义,sed也一样,他其实是一种非交互式流编辑器
首先它是一个编辑器,重点在于,它不像vim这种编辑器一样直接open file到里面去编辑。使用者大概率已知目标文件的特点,所以使用sed看不见文件里面的内容,只是把文件流读出来,然后按照一定pattern处理。非交互式也很容易理解,sed处理编辑文本就一条cmd。
个人觉得它的最主要优点就是简单、简洁,符合linux大道至简的精髓,一条cmd借助正则pattern,能够达到以一敌百,斩敌迅捷,不留痕迹的处理效果。喜欢用sed的人往往正则用的需要很溜,因为就像上面说的,sed很依赖正则

sed的基本格式

首先就是sed的一般格式:

sed [参数,option] [执行命令] [target]

比方说,举一个很常用也很容易看懂的例子:

sed "s/my/your's/g" pets.txt 

"s/my/your's/g"就是执行命令pets.txt就是目标文件target.

仔细来看一下执行命令:

"s/my/your's/g"

结构很清楚,以"/"作为各个segment的分割。逐个解释每个segment:
s:替换的方式处理每一行文本
my:原始(匹配)符
your's:替换(目标)符
g:匹配中的字符全部执行(全局执行)

所以上述,命令就是把pets.txt文件中,每一行的字符’my’全部替换成‘your’s’。
注意sed并不会直接更改文件内容,只是把处理之后的内容print到terminal,如果想要更改源文件那么可以使用重定向:

sed "s/my/Hao Chen's/g" pets.txt > hao_pets.txt

或者加参数-i:

sed -i "s/my/Hao Chen's/g" pets.txt

sed的具体使用

上述demo简单讲解了一下sed的最基本结构,已经将sed的所有参数都覆盖到了.接下来根据需要,变换参数,达到不同功能。

1. 指定行范围

如果我要文件的第1,2行执行替换呢?

扫描二维码关注公众号,回复: 12562725 查看本文章
sed "1,2s/my/your/g" pets.txt

就只是在s替换命令符前面加了1,2

具体行范围控制规则如下:
在这里插入图片描述

2. 非全局

之前是g全局匹配。那么我只想每行第一个my被替换呢?
g换成1就可

sed "s/my/your/1" pets.txt

也可以数字和g也可以混在一起:3g

sed "s/my/your/3g" pets.txt

表示第一行的第三个my之后的所有

3. 同时多个匹配

比方说要一个sed的执行命令里执行多个匹配:
用分号分割即可

sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt

也可以用-e参数

sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt

4. 圆括号

比方说想要复杂一些,当一行匹配成功之后,希望匹配中的某些segment被引用
圆括号就可以达到这个目的。来实现更复杂的匹配编辑

sed 's/This is my \([^,&]*\),.*is \(.*\)/\1:\2/g' my.txt

在这里插入图片描述
其实就是圆括号处被后面修改目标\1,\2引用了

总结

所以可以简单总结一下sed的精髓

sed + 参数 + 执行命令 + 目标文件

参数为可选,执行命令为最主要的部分(包含正则)

而执行命令大致思路如下:

 step + 功能命令 + '/' + pattern + '/' + pattern + '/' +  范围命令或者功能命令

比方说:

sed "s/my/your/1" pets.txt
sed '/fish/d' my.txt  # 所有行匹配中fish的删除
sed -n '/fish/p' my.txt  # 所有行匹配中fish的打印,常和 -n 搭配,只打印匹配中的;否则会打印两遍
sed '/fish/d' my.txt  # 将匹配中fish的那行删除

当然有些功能命令由于其性质,不一定按照上面这种以’/'分割的格式

sed "$ a This is my monkey, my monkey's name is wukong" my.txt  # 开头($)处append(a)一行内容
sed "2 c This is my monkey, my monkey's name is wukong" my.txt  # 第二行替换为后面的内容

sed的详细参数扩展

再看一眼sed的一般格式:

sed [参数,option] [执行命令] [target]
  1. 参数选项
    在这里插入图片描述

  2. 执行命令
    在这里插入图片描述
    正如前面提及的,执行命令有些放在'/'分割符前面,如‘s’;而有些放在最后,范围命令'g'那个地方,如'd''p

  3. 其他拓展
    有一些H,G等命令还有holdplace的知识点暂时我还用不到。
    详见sed简明教程

参考

sed简明教程
实验楼

猜你喜欢

转载自blog.csdn.net/weixin_43301333/article/details/114151734
今日推荐