文件对比(diff),替换(sed)

  • 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       # 删除最后一行

猜你喜欢

转载自blog.csdn.net/jjt_zaj/article/details/113104745
今日推荐