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列