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列
