本系列目录
- Linux Shell和基本指令
- Bash shell语法
- 正则表达式
- 文本处理之grep
- 文本处理之sed
- 文本处理之awk
- Text GUI编程
- Tomcat启动脚本分析
- gradlew脚本分析
本章和后面一章不会深入了解,因为设计到的东西很多,一时间不能把他们全部说完,
sed可以在不打开文件的情况下操作文本文件,进行替换、搜索、插入、删除,sed是以行为单位的非交互式编辑器,他通过标准输入或文件获得要处理的文本,对指定的行进行逐行处理,然后将结果输出到标准输出或者文件。
他与图形用户界面相比,在终端中可以更快更好地完成某些任务,前提是需要熟练掌握这些命令。
sed 命令的基本格式如下:
$ sed [选项] [脚本命令] 文件名
选项:
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容;
-n :只打印模式匹配的行;
-r :支持扩展表达式;
脚本命令:
a append,对文本追加,在指定行后面添加一行或多行文本
d delete,删除匹配行
i insert,插入文本,在指定行之前添加一行或者多行文本
p print,打印指定行内容
s/正则/替换内容/g 匹配正则内容,然后替换内容,g表示全局替换
示例
在某行插入\追加字符
$ cat 1.txt
1
3
4
$ sed -e 1a2 1.txt
1
2
3
4
注意的是,sed默认不会对原文件进行修改,只会输出到标准输出,可以加-i选项,也可以使用>、>>手动将结果输出到其他文件。
如上,1a2表示在第一行后面追加(a)一个字符2。
而使用i表示在某行前面插入,如sed 2i2 1.txt表示在第2行前面插入字符2。
想在文件最后一行后面追加文本可使用sed '$a5' 1.txt,表示在最后追加字符5。.
删除某行
sed 2d 1.txt
如上,2d表示删除第2行,当然也可以使用区间,sed 1,3d 1.txt表示删除1-3行。
还可以通过!取反,如sed '1,2!d' 1.txt表示删除除了1、2行之外的所有行。
删除带有指定字符的行
sed /2/d 1.txt
如上 /2/d表示删除带有字符2的所有行。
输出某行之后的所有行。
sed '4,$d' 1.txt
显示某区间的行。
sed -n 1,4p 1.txt
显示带有指定字符的行
sed -n /java/p 1.txt
替换文本
$ cat 1.txt
i love linux
$ sed 's/linux/vb/g' 1.txt
i love vb
s/linux/vb/g'表示在全局中将所有linux替换为vb,这里可以使用正则,如下,表示将所有a开头的行替换为字母P
sed 's/^a.*/P/g' 1.txt
还有个c命令也可以做到把指定的行替换为新字符,如下,表示把第一行替换为123456
sed '1c123456' 1.txt
删除空白行
sed '/^$/d' 1.txt
删除文件最后一行
sed '$d' 1.txt
打印奇数行
sed -n 'p;n' 1.txt
打印偶数行
sed -n 'n;p' 1.txt
显示行号
sed '=' 1.txt
将所有行开头的字母转换为大写
sed 's/\([a-z]\)\([a-zA-Z0-9]*\)/\u\1\2/g' 1.txt
将检索到的行打印出来
以下命令用于搜索'L'开头的行,并使用'&'符号附加到检索到的行是 - '。 这里。
$ cat 1.txt
Linux
Window
Android
$ sed -n 's/^L/检索到的行是 - &/p' 1.txt
检索到的行是 - Linux
全部转小写
sed 's/\(.*\)/\L\1/' 1.txt
全部转大写
sed 's/\(.*\)/\U\1/' 1.txt