sed命令学习
- sed命令理论知识
- sed命令练习
- 1.显示test文件的3-9行:
- 2.显示包含oo字符串的行到包含gin字符串的行:
- 3.在文件第一行添加haha,文件结尾添加yesyes:
- 4.用hahaha替换oo,打印前20行:
- 5.删除空行和以#开头的行:
- 6.取出一个文件路径的目录名称:
- 7.在第8行下面插入hahaha第10行上面插入lalala:
- 8.显示第25行到最后,并在每行的后面添加hhh:
- 9.删除20到30行最后一个单词(字符):
- 10.将15到25行第一个字符与最后一字符对调:
- 11.为文件中每个大写字母添加括号:
- 12.文件中出现所有sbin都被替换成hahah,只有发生变化的行才被打印:
- 13.解除文件注释,并删除4-6行:
- 14.删除1-3行并用root替换sbin:
- 15.删除1-8行并打印1-20行:
- 16.把所有var全部替换成root,并将第一个字符和最后一个字符对调:
- 17.删除所有包含var的行:
- 18.把20行以后的末尾加上awr:
- 19.打印第1到20行,删除15行后面所有的行:
- 20.将字符串/var替换成/hahaha,打印20,40行:
sed命令理论知识
sed是非交互式的编辑器。sed工具不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
参数:
-a :新增,后面可以接字串,这些字串会在新的一行出现(目前的下一行)
-c :取代,后面可以接字串,这些字串可以取代 n1,n2 之间的行
-d :删除
-i :修改源文件
-p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
-s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正规表示法
-n :取消默认的完整输出,只要需要的
-r : sed 使用扩展正则表达式
-e :允许多项编辑
sed命令练习
1.显示test文件的3-9行:
# sed -n '3,9p' test.txt
2.显示包含oo字符串的行到包含gin字符串的行:
# sed -n '/oo/,/gin/p' test.txt
3.在文件第一行添加haha,文件结尾添加yesyes:
# sed -e 'li haha' -e '$a yesyes' test.txt
4.用hahaha替换oo,打印前20行:
# sed -n -e 's/oo/hahaha/g' -e '1,20p' test.txt
5.删除空行和以#开头的行:
# sed -e '/^$/d' -e '/^#/d' test.txt
6.取出一个文件路径的目录名称:
# echo "/etc/sysconfig/network" |sed -r 's@^(/.*/)[^/]+/?@\1@g'
7.在第8行下面插入hahaha第10行上面插入lalala:
# sed -e '8a\hahaha' -e '10\lalala' -n -e '1,10p' test.txt
8.显示第25行到最后,并在每行的后面添加hhh:
# sed -e '25,$s/^.*$/hhh$/' -n -e '25,$p' test.txt
9.删除20到30行最后一个单词(字符):
# sed -r -e '20,30s/.$//' -n -e '20,30p' test.txt
10.将15到25行第一个字符与最后一字符对调:
# sed -r -e '15,25s/^(.)(.*)(.)$/\3\2\1/' -n -e '15,25p' test.txt
11.为文件中每个大写字母添加括号:
# sed -r 's/([A-Z])/(\1)/g' test.txt
12.文件中出现所有sbin都被替换成hahah,只有发生变化的行才被打印:
# sed -n 's/sbin/hahah/gp' test.txt
13.解除文件注释,并删除4-6行:
# sed -e 's/^#//g' -e '4,6d' test.txt
14.删除1-3行并用root替换sbin:
# sed -e '1,3d' -e 's/sbin/root/g' test.txt
15.删除1-8行并打印1-20行:
# sed -e '1,8d' -n -e '1,20p' test.txt
16.把所有var全部替换成root,并将第一个字符和最后一个字符对调:
# sed -e 's/var/root/g' -r -e 's/^(.)(.*)(.)$\3\2\1/' test.txt
17.删除所有包含var的行:
# sed '/var/'d test.txt
18.把20行以后的末尾加上awr:
# sed '20,$s/.$/awr/g' test.txt
19.打印第1到20行,删除15行后面所有的行:
# sed -n -e '1,20p' -e '15,$'d test.txt
20.将字符串/var替换成/hahaha,打印20,40行:
# sed -e 's#var#hahaha#g' -n -e '20,40'p test.txt