- diff 检查两个文件的不同之处
- sed 流式文本编辑器
- tr 替换
diff
检测两个文件的不同,常用格式
diff -u file1 file2
[dps@ccod131 bak]$ diff -u test11.txt test12.txt
--- test11.txt 2018-11-27 14:12:56.189972213 +0800
+++ test12.txt 2018-11-27 14:12:36.294972247 +0800
@@ -1,3 +1,3 @@
2018.11.21
2018.11.22
-aaaaaa
+2018.11.23
解析:
- 分别使用-和+表示两个文件;
- @@行,显示了所涉及文件的行号;
- 前边无标志的内容,表示公共的内容;
- 前边有“-”号的内容行,表示是test11文件独有的内容,文件test12无该行内容
- 前边有“+”号的内容行,表示是test12文件独有的内容,文件test11无该行内容
sed
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
参考链接:
https://wangchujiang.com/linux-command/c/sed.html
文本替换
使用命令s
,替换指定字符
格式:sed 's/a/b/'
- /是分界符,可以替换为任何的字符。使用比较便捷
- a是待替换内容,可以用正则表达式来匹配
- b替换后的内容
- 默认仅替换匹配到的第一个符合条件的数据,若要全部替换,使用
g
命令sed 's/a/b/g'
; - 仅替换输出到屏幕,不会直接修改文件,若要直接修改文件,使用
-i
参数sed -i 's/a/b/g' file
- 当需要从第N处匹配开始替换时,可以使用 /Ng
sed 's/a/b/2g'
- -n选项 和 p命令 一起使用表示只打印那些发生替换的行
- 组合多个表达式
sed '表达式; 表达式'
子串匹配标记\1
- ()生成子字符串;
- 代替正则表达式的部分
# 文件原内容
[dps@ccod131 bak]$ cat test11.txt
2018.11.21
2018.11.22
aaaaaa
# i 直接修改文件内容
# 使用 d 命令删除
# $ 表示最后一行
[dps@ccod131 bak]$ sed -i '$d' test11.txt
[dps@ccod131 bak]$ cat test11.txt
2018.11.21
2018.11.22
# 使用~作为分界符;
# 正则表达式的扩展元字符在这里需要转义;
# ()创建子字符串;
# 并且这里使用了子串标记的功能\n,将1,2,3顺序换为2,3,1,且分界符换为/
[dps@ccod131 bak]$ sed "s~\([0-9]\{4\}\)\.\([0-9]\{2\}\)\.\([0-9]\{2\}\)$~\2/\3/\1~g" test11.txt
11/21/2018
11/22/2018
删除操作
命令d
sed '/^$/d' file # 删除空行
sed '2d' file # 删除第2行
sed '2,$d' file # 删除第二行到末行
sed '/^test/'d file # 删除以test开头的行
sed '$d' file # 删除最后一行