文本三剑客&正则表达式2
1 sed
主要是对文件内容按照行的方式进行增删改查
工作流程
sed的工作流程主要包括**读取、执行和显示**三个过程
-
读取
- sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )
-
执行
- 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行
-
显示
- 发送修改后的内容到输出流
- 在发送数据后,模式空间将会被清空在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完
注意:默认情况下所有的sed命令都是在模式空间内执行的
因此**输入的文件并不会发生任何变化,除非使用"sed -i"修改源文件**、或使用重定向输出到新的文件中
2 sed命令的常用选项
-e 或–expression= 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 或–file= 表示用指定的脚本文件来处理输入的文本文件。
-h 或–help显示帮助。
-i 直接修改目标文本文件
-n 仅显示script处理后的结果
3 sed命令的操作符
操作符 | 作用 |
---|---|
s | 替换指定字符 |
d | 删除选定的行 |
a | 在当前行下面增加一行指定内容 |
i | 在选定行上面插入一行指定内容 |
c | 将选定行替换为指定内容 |
y | 字符转换,转换前后的字符长度必须相同 |
p | 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出 其通常与“-n”选项一起使用 |
= | 打印行号 |
l | 打印数据流中的文本和不可打印的ASCII字符,比如结束符$、制表符\t |
4 打印
4.1 按照行号寻址打印
sed有一个默认输出,加上P,会打印两遍,因此需要加上-n,禁止默认输出
4.1.1 只打印第二行
4.1.2 只显示行号
4.1.3 显示行号及内容
4.1.4 只打印最后一行
4.2 进行行号范围区间的打印
4.2.1 打印1-3行
4.2.2 打印第二行到最后一行
4.2.3 打印2-4行
4.3 指定间隔打印
4.3.1 打印第二行和最后一行
4.4 对奇数行和偶数行的打印
4.4.1 打印偶数行(n:跳过第一行,打印第二行)
4.4.2 打印奇数行(n:打印第一行,跳过下一行,继续打印)
4.4 文本模式过滤行内容
4.4.1 对包含的字符串进行过滤打印
打印包含a的所有行
4.5应用基础正则表达式进行打印
4.5.1 打印以root开头的行
4.5.2 打印以bash结尾的行
4.5.3 从第四行开始,一直打印到第一个以bash为结尾的所在行
4.6 使用扩展正则表达式进行打印
sed -r 支持扩展正则表达式
同时在 使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\
包含有两个99:的内容所在行
5 删除
5.1 通过行号进行删除
5.1.1 删除所有,什么也不打印
5.1.2 只删除第三行
5.1.3 删除2-4行
5.1.4 删除第2行到最后一行
5.1.5 除了2-4行,别的都删除
5.2 匹配字符串内容删除
5.2.1 删除包含111的行
5.2.2 删除包含111和222的行
5.2.3 除了111和222,别的行都删了
5.2.4 字符串搭配正则进行删除
5.3 删除空行
-
删除空行的三种方法
grep -v "^$" test1.txt ----过滤出非空行
cat test1.txt |tr -s "\n" ----压缩换行符
sed '/^$/d' test1.txt ----删除空行
6 替换
s:替换字符串(替换内容长度可不一致)
c:整行替换
y:字符替换,替换前后的字符串长度必须相同
6.1 指定第二个root,替换为了test
6.2 把所有的root改成test
6.3 把root开头的空格替换成#注释掉
6.4 把大写改成小写
l&是转换小写的一种特殊的符号,前面要加转义符“\”
6.5 把小写改成大写
u&是转换首字母大写的一种特殊的符号,前面要加转义符“\”
6.6 把有aaa的行全部整行替换成qzz
6.7 把单字符a和6分别替换成q和z
7 增加
a:在下一行添加内容
i:在上一行插入内容
r:在行后读入文件内容
7.1 在111这行下面插入three
7.2 在333的前一行插入four
7.3 先读取test1里面的内容,把他插入到test2的行后
文章来源:https://www.toymoban.com/news/detail-447232.html
7.4 sed命令中字符串和字符的位置交换
文章来源地址https://www.toymoban.com/news/detail-447232.html
到了这里,关于文本三剑客&正则表达式2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!