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

 

posted @ 2018-10-14 22:28  十七楼的羊  阅读(1322)  评论(0编辑  收藏  举报