替换
sed 's/old/new/g'和vi里面%s/old/new/g一样
根据关键字查询某行其上或其下插入一样
sed '/关键字/i 添加内容' 文件
案例:root@localhost soft]# cat test.txt
a
b
c
d
[root@localhost soft]# sed -i '/a/i new number' test.txt
[root@localhost soft]# cat test.txt
new number
a
b
c
d其中i上在其上插入一行a是在其下面插入一行\n添加的内容换行插入的意思
后续增加
%s/^ //g ,%s/ $//g替换空格为空用sed一样
sed -i '/^/& /g' test.txt 在行首加入空格或者也可以加入内容行尾的话就改成$
匹配打印关键字的那行sed -n '/关键字/p' test.txt ,sed -n '1p',sed -n '1,5p' 打印某行或范围
cat test.txt |sed 's/ /\n/g' | grep -v "^$" |sort -nr | sed -n '1;$p' 将空格的内容换行然后过滤空行并打印最大和最小也就是第一和最后一行sort -nr是从大到小排列
cat test.txt | grep "关键字" | sed ‘s/old/new/g’过滤然后替换
root@localhost ~]# ifconfig | grep "Bcast" | awk '{print $2}'|sed 's/addr://g'
root@localhost ~]# ifconfig | grep "Bcast" | awk '{print $2}'|cut -d: -f2
root@localhost ~]# ifconfig | grep "Bcast" | awk '{print $2}'|awk -F: '{print $2}'
以上是打印ip的几种方法,道理差不多,只是表现方式不同
[root@localhost ~]# awk -F: '/^root/{print $1}' /etc/passwd
这句命令是打印以root开头的第一列,可以变化着用
awk切割多个分割符:范例[]可以实现
[root@localhost data]# cat 1.txt
a:b:c:d
121/121213/325ds/sfdd
ews|asfdsa|afsds|xzcds|[root@localhost data]# awk -F'[:/|]' '{print $1}' 1.txt
a
121
ewssed '/关键字/s/old/new/g'查找关键字查询替换
sed合并两个文件范例:[root@192_168_77_189 mnt]# cat a b
33 218.108.34.254
42 202.103.24.68
22 202.11.23.43
21 212.12.13.12
33 杭州
42 武汉
22 河南
21 江苏
[root@192_168_77_189 mnt]# awk 'NR==FNR {a[$1]=$0} NR>FNR {print a[$1],$2}' a b
33 218.108.34.254 杭州
42 202.103.24.68 武汉
22 202.11.23.43 河南
21 212.12.13.12 江苏文件一和文件二匹配每行相同字段合并并打印出来:[root@192_168_77_189 mnt]# cat a b
33 218.108.34.254
42 202.103.24.68
22 202.11.23.43
21 212.12.13.12
33 杭州
42 武汉
22 河南
25 江苏
[root@192_168_77_189 mnt]# awk 'NR==FNR {a[$1]=$0} NR>FNR {for (i in a) if (i==$1) print a[i],$2}' a b
33 218.108.34.254 杭州
42 202.103.24.68 武汉
22 202.11.23.43 河南意思是读取第一个文件把每行内容存入数组a[$1]然后读取第二个文件判断$1等于数组a里面的内容然后打印数组a[i]和第二个文件的$2
[root@192_168_77_189 mnt]# cat c d
1 aa
2 bb
3 ee
4 ss1 ab
2 cd
3 ad
4 bd
5 de
[root@192_168_77_189 mnt]# awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' c d
1 ab aa
2 cd bb
3 ad ee
4 bd ss
5 de[root@192_168_77_189 mnt]# cat a.txt b.txt
韩海林 21岁
海林韩 23岁
韩林海 22岁
林海韩 24岁
lixi 22岁
李明 25岁
韩林海 男
海林韩 男
韩海林 男
林海韩 男
*** 女
[root@192_168_77_189 mnt]# awk 'NR==FNR{a[$1]=$0}NR>FNR{if($1 in a)print a[$1],$2}' a.txt b.txt
韩林海 22岁 男
海林韩 23岁 男
韩海林 21岁 男
林海韩 24岁 男打印出相同的字段合并输出,读取第一个文件数组等于$0全部内容,读取第二个文件的时候判断$1在数组里面然后打印出来
匹配打印ip:[root@192_168_77_189 mnt]# cat test.txt
user_id ip createtime
1001 202.103.24.68 72
1002 192.168.2.4 2
1003 232.2.234.24 4
1004 232.232.25.3 21
[root@192_168_77_189 mnt]# cat test.txt |awk '{print $2}'| grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"
202.103.24.68
192.168.2.4
232.2.234.24
232.232.25.3cat -n可以打印行号
egrep "a|b" test.txt
df -h | grep "/$"| awk '{print $5}'|sed 's/%//g' 打印出磁盘使用率
cat test.txt | awk '{print $NF}'|sed 's/^/&01: /' 打印出最后一列在前面开头加个字符01cat test.txt | awk '{print "01: "$NF}'也可以
find . -maxdepth 1 -type f -name “*.txt” -mtime +30 -exec rm -rf {}\;查找一级目录的文件30天以前的-mtime -1 一天以内的
sed '1s/old/new/g' test.txt 换第一行可以指定任何一行,sed -n '$p' 打印最后一行
sed '/^关键字/p' |sed '/关键字$/p' test.txt 过滤打印
sed '/关键字/s/old/new/g'根据关键字查询替换
cat text.txt |awk '{sum+=$1}END{print sum}' 求和
sed -n '/时间*/,/时间/p'
sed -n '/17 05:30:29/,/17 05:31:07/p' messages按时间查找找到日志里面访问最多的ip按次数统计出来从大到小排列,uniq -c去重统计次数
cat access.log | awk '{print $1}' |
awk '{print $1}'|sort |uniq -c |sort -nr|head 10 /access.logawk '{print $1}' access.log |sort |uniq -c |sort -nr |head 10 sort -nr 从大到小排列
df -h | sed 's/%//g'|awk '{if($5>20) {print $0}}'
netstat -an |awk '/^tcp/ {print $NF}' | sort |uniq -c |sort -nr统计当前连接请求
awk按序号排列从0开始就NR-1:[root@192_168_77_189 ~]# awk -F: '{print $1}' /etc/passwd |awk '{print NR,$NF}'|head -10
1 root
2 bin
3 daemon
4 adm
5 lp
6 sync
7 shutdown
8 halt
9 mail
10 uucp[root@192_168_77_189 ~]# cat test.txt 排序
['-1,1,12,1,3,87,78888,232,52323,276,137']
[root@192_168_77_189 ~]# cat test.txt |sed "s/\[//g;s/'//g;s/\]//g;s/,/ /g"|sed 's/ /,\n/g'|sort -n|tr -d "\n" |sed "s/^/&[\'/g" |sed "s/,$/']/g"
['-1,1,1,3,12,87,137232,276,52323,78888']几种去除^M的方法:cat 222.txt | tr -d "\r" > newfile 或者sed -e "s/^V^M//" filename > outputfilename
awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"}' ipnew.txt处理文本列的间隔
netstat -nlptu |awk '{print $4,$7}' | grep 80 根据端口查看哪个程序再用
http://www.92csz.com/study/linux/13.htm
http://www.regexlab.com/
参考链接
后续总结在一一添加