sed 是一种非交互式的流编辑器,处理的对象是文件的数据流(stream/流),不会更改文件内容

    a 追加(单行),i 插入(单行),c 替换
    [root@zyg ~]# vim z.txt
    aaaaa
    bb xx bbb
    ccccc
    ddddd
    在xx下面追加
    [root@zyg ~]# sed ‘/xx/a hello’ z.txt
    在xx上面追加
    [root@zyg ~]# sed ‘/xx/i hello’ z.txt
    xx行做替换
    [root@zyg ~]# sed ‘/xx/c hello’ z.txt

    p 打印
    sed -n ‘2p’ passwd.txt 打印第2行
    sed -n ‘2,4p’ passwd.txt 打印2-4行
    sed -n ‘1p;3p;8p’ passwd.txt 打印1,3,8行 非连续
    sed -n ‘/^bin/p;/bash$/p’ /passwd 打印bin开头和bash结尾的
    sed -n ‘/root/,5p’ passwd.txt 打印含有root的行 和第五行

    s 取代
    sed -r ‘/IPADDR/s/(.)=(.)/\1/‘ ifcfg-ens37
    sed ‘s/root/A/;3,7d’ passwd.txt 用A替换root 删除 3到7行
    sed ‘2,4s/a/A/‘ a.txt 2-4行取代
    sed -r ‘s/a{4,6}/b/‘ a.txt 只有a出现4-6次,才取代
    sed –r ‘s/(.)(.)(.
    )/\2\1\3/‘/etc/passwd 分组并按2 1 3的顺序输出
    sed -r ‘s/(.)(.)/\2/‘ aa.txt 不显示文件每行的第一个字符
    sed -r ‘s/(.
    ):(.)/\2\t\1/‘ aa.txt 以:分割,左右调换位置,并打一个tab
    sed “s/nologin/$a/“ passwd.txt 用变量取代 不能再使用单引号了 或者前面+eval解释
    sed ‘/^#/!s/.
    /#&/‘ /etc/fstab sed ‘/^#/!s/^/#/‘ /etc/fstab 将没有注释的都注释掉
    尾部+g 全局取代

    l显示不可见字符

    y 转换字符
    sed ‘y/abcdefg/1234567/‘ passwd.txt 挨个单词对应的转换

    i 忽略大小写
    sed ‘/xx/i hello’ test.txt

    d 删除 加在最尾部
    sed ‘$d’ test 删除尾行
    sed ‘3,+2d’ test 删除3行到5行 里面的+号有无都可以

    = 打印行号
    sed -n ‘$=’ passwd.txt 打印几件一共多少行
    sed -n ‘/root/{=;p}’ /root/passwd 打印有root的 在第几行

    \U \L \u \l \E 大小写转换
    \U 全转换为大写 sed -r ‘s/(.):(.)/\U\2\E\t\1/‘ /root/passwd
    \u 只把第一个字母转换为大写
    \L 全转换为小写
    \l 只把第一个字母转换为小写
    \E 停止转换

    AWK 是一种用于处理文本的编程语言工具

    NF 在括号外可以指定第几段,打在括号内打印每行段落数,就是有多少列
    NR 在括号外可以指定第几行(NR==2),在括号里表示打印行号
    $0 打印所有列的全行内容
    $1 打印所有行的第一列内容
    $(NF-1) 打印倒数第二列
    -F 使用正则

    awk -F: ‘{print $1}’ /etc/passwd 打印文件所有行的第一列
    awk ‘{print $1,$2,$0}’ /etc/passwd 打第一列再打印第二列再打印所有列
    awk ‘{print NF,$0}’ passwd.txt NF统计段落 $0打全行内容
    awk ‘{print NR,$0}’ passwd.txt NR打行号 $0打全行内容
    awk ‘NR==2,NR==5 {print NR,$0}’ passwd.txt 列出2-5行全部内容
    awk -F”:” ‘$NF ~ /bash/ && NR >15 {print}’ /etc/passwd 列出尾部是bash 和行号大于15的
    awk -F: ‘/root/{print}’ /etc/passwd 打印所有含有root的行
    awk -F”[ /]+” ‘$3==”tcp” && $1 ~ /^ssh/ && $2<1000 {print $1,$2,$3}' /etc/services 第三行是tcp 开头是ssh
    awk -F'[ /]+' '$1 ~ /^(ftp|dns|ssh|http)$/ {print $1,$2}' /etc/services 符合判断的就打印1,2列
    awk -F: '$(NF-1) ~ /daemon/ {print $(NF-1)}' /etc/passwd 打印倒数第二行是~daemon的
    awk '$1 ~ /o{1,2}/ {print $1}' passwd.txt 有一到两个o的
    awk -F: '$3 >= 1000 || $3 == 0 {print $1,$3}’ /etc/passwd 第三列大于1000 或者是0的
    awk ‘NR>1 { a+=$2 ; b+=$3 ; c+=$4 } END {print “三科成绩总分为:”a,b,c }’ xiaoming.txt 行数大于1,第二列所有数相加,第三列相加,最后列出来
    awk ‘NR>1 { if($2 >60 && $3>60 && $4 > 60 ) print $1”好厉害,三科成绩为”$2,$3,$4} ‘ xiaoming.txt 找到所有三科成绩都大于60分的行
    awk ‘{a=0 ; for (i=1;i<=NF ;i++ ) a+=$i ; print a}’ sheet1.txt 打印每个行的总成绩
    awk ‘/^$/ {a++ } END {print a }’ /etc/services
    awk ‘/login/ {print $1}’ passwd.txt 含有login的 打印第一列
    awk -F: ‘BEGIN { print “————— hello world ———————-“ } {print $1,$3,$(NF-1)} END { print “———————— end —————————“} ‘ /etc/passwd 页眉hello world 页尾end 中间打第1,3,倒数第2列