三,sed 编辑工具
1,sed 是功能十分强大的用于文本处理的流编辑器,
2,sed 的正则表达式的支持,可以进行大量的复杂的文本编辑操作
3,sed 是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构
4,sed会一次处理一行内容 行文本编辑器
基本格式:
sed option 'script' file1 file2 ... # script 指的是正则
sed option -f scriptfile file1 file2 ...
常用的参数:
--version 显示sed版本。
--help 显示帮助文档。
-n,--quiet,--silent 静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,只打印匹配到的
-e script 允许多个脚本指令被执行。
-f script-file,
--file=script-file 从文件中读取脚本指令,对编写自动脚本程序来说很棒!
-i,--in-place 直接修改源文件,经过脚本指令处理后的内容将被输出至源文件(源文件被修改)慎用!
-l N, --line-length=N 该选项指定l指令可以输出的行长度,l指令用于输出非打印字符。
--posix 禁用GNU sed扩展功能。
-r, --regexp-extended 在脚本指令中使用扩展正则表达式
-s, --separate 默认情况下,sed将把命令行指定的多个文件名作为一个长的连续的输入流。而GNU sed则允许把他们当作单独的文件,这样如正则表达式则不进行跨文件匹配。
-u, --unbuffered 最低限度的缓存输入与输出。
常用的指令:
'''
常用的指令
a,append 追加
i,insert 插入
d,delete 删除
s,substitution 替换
sed的编辑命令可以直接当命令行参数:
/pattern/p 打印匹配pattern的行
/pattern/d 删除匹配pattern的行
s/pattern1/pattern2/ 查找 包含 pattern1 的所有行 并且替换成 pattern2
/pattern/s/pattern1/pattern2/ 查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
/pattern/s/pattern1/pattern2/g 查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2
'''
具体事例:
# 删除 10.txt 文件 2到5行 只是不打印 实际不删除
sed "2,5d" 10.txt
# 删除 10.txt 文件 2到5行 加上 -i 真正删除
sed "2,5d" 10.txt
# 在 包含有'1' 的所有行 下面打印 原模原样打印一遍
sed '/1/p' 10.txt
# 删除包含 'abc' 的所有行
sed '/abc/d' 10.txt
# 将 bc 替换成 -bc- '&' 表示 bc
sed 's/bc/-&-/' 10.txt
# 将 <.*> 匹配到的 都替换成空格 并打印出来
# sed 默认是贪婪模式
sed 's/<[^>]*>/ /g' 10.html
# ; 表示 两个指令隔开 将 yes 更改为 no,static 更改为 dhcp
sed 's/yes/no/;s/static/dhcp/' ./10.txt
常用的 文本处理命令
wc [option] [file]...
-l: 统计行数
-c: 统计字节数
-w;统计单词数
tr: 转换字符或删除字符
tr '集合1' '集合2'
tr -d '字符集合'
按字符进行比较
sort [option] file...
-f: 忽略字符大小写;
-n: 比较数值大小;
-t: 指定分隔符
-k: 指定分隔后进行比较字段
-u: 重复的行,只显示一次;
uniq 移除重复的行
-c:显示每行重复的次数
-d:仅显示重复过的行
-u: 仅显示不曾重复的行
# 显示 1.txt 的行数 单词数 字符数
wc 1.txt
#按照字符进行排序 并且去除重复行(-u)
sort -u 1.txt
# 移除重复的行,并显示重复的次数
uniq -c 1.txt
# 1.txt中出现的"a"替换为"xyz" 并写入 2.txt之中
cat 1.txt | tr "a" "xyz" > 2.txt
# ls 显示的所有信息之中 只打印第三个字符
ls | cut -b 3
![]()