shell 编程常见工具(其五 sed)
三,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