sed编辑命令之关于什么是反向引用的txt文档

来源:9-6 sed中的编辑命令详解(下)

八卦一百二十八掌

2021-01-23

酷老师,能否将课程中关于什么是反向引用哪里的txt笔记贴出来一下,课程中挡住了看不到。
在资料中也找不到。

写回答

1回答

酷田

2021-02-28

我把txt文档内容发出来,供参考,可以下载附件查看,可以慕课不能直接上传附件

//img1.sycdn.imooc.com/szimg/603afe8f096161ea13320701.jpg

对文件的操作,无非就是增加、删除、查询、修改;

编辑命令用法总结:

查询:

1、p -----------打印

删除:


2、d -----------删除

增加:


3、a -----------匹配到的行后追加内容


4、i -----------匹配到的行前追加内容


5、r -----------将后面指定文件的内容追加到匹配到的行后面


6、w -----------将匹配到的行内容另存到其他文件中

修改:


7、s/pattern/string/ ------------查找并替换,查找符合pattern模式的字符串,将其替换为string  适配(一、二、三、四、五)


s/pattern/string/g ------------g表示全部行内全部匹配

s/pattern/string/2g ------------2g表示,同一行内,只替换前2个匹配的,剩下的不替换


s/pattern/string/ig -------------加i参数表示匹配时忽略大小写,g表示匹配到的全部替换

其他编辑命令:

8、= -------------显示行号


什么是反向引用?

&和\1 引用模式匹配到的整个串


sed "s/l..e/&r/g" file 在file中搜寻以l开头,然后跟两个任意字符,以e结尾的字符串,在找到的字符串后加r字符(后向引用)


sed "s/\(l..e\)/\1r/g" file 和上面实现一样的功能,使用\1代表搜寻到的字符串


上面两种方式实现了一样的功能,分别使用&和\1引用前面匹配到的整个字符串


两者区别在于&只能表示匹配到的完整字符串,只能引用整个字符串;而\1可以使用()对匹配到的字符串进行分组,可以替换完整字符串,也可以替换子串,更加灵活


例如:如果我们仅想要替换匹配到的字符串的一部分,name必须使用\1这种方式,不能使用&。


查找test.txt文件中以l开头,紧接着跟两个任意字符,再接一个e的字符串。将找到的字符串中开头的小写l换成大写L


sed "s/l\(..e\)/L\1/g" test.txt

sed中引用变量时注意事项:

(1)、匹配模式中存在默认变量,则必须使用单引号

(2)、sed中需要引入自定义变量时,如果外面使用单引号,则自定义变量也必须使用单引号


1
0

掌握Shell脚本编程 360架构师带你进阶Linux高手

30%知识讲解+70%实例操作 掌握Shell脚本编程能力

1638 学习 · 297 问题

查看课程