一、部分字符说明:
1)^word 匹配以word开头的内容 vi/vim 里^代表一行的开头
2)word$ 匹配以word结尾的内容 vi/vim 里$代表一行的结尾
3)^$ 表示空行
4). 代表且只能代表任意一个字符
5)\ 转义符号,例\.就只能代表点本身,让有特殊意义的字符脱掉马甲,还原本身。\$。
6)* 重复0个或多个前面的一个字符,例o*匹配没有o,有1个o或多个ooooo
7).* 匹配所有字符。 延伸^.*以任意多个字符开头。.*$以任意多个字符结尾
通过sed只获取ip地址例子:
ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'|sed 's#B.*$##g'
ifconfig eth0:获取本机网卡eth0的ip地址
sed -n '2p':打印第二行的内容
sed 's#^.*dr:##g':表示dr:之前的内容全部替换成空
sed 's#B.*$##g':表示以B开始至结尾的内容全部替换成空
其他方法:
ifconfig eno16777736|awk -F "[ ]+" 'NR==2 {print $3}'
-F:指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:
NR=2:第二行
$3:第三列
ifconfig eth0|sed -n '2s#^.*dr:##gp'|sed -n 's#B.*$##gp'
ifconfig eht0|sed -nr 's#^.*dr:(.*) Bca.*$#\1#gp'
-r:代表转义,加了-r就不用\了
grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0|cut -d= -f2
grep IPADDR:只显示IPADDR的内容
cut -d= -f2:-d=表示以=为分隔符,-f2表示选择分隔符的第二部分
使用命令调换passwd文件里root位置和/bin/bash位置:
sed -nr 's#([^:]+)(.*:.*:)(.*$)#\3\2\1#gp' /etc/passwd
([^:]+):表示以:开头1次或多次
\3\2\1:表示打印的顺序,\3打印第三个括号的内容,\2打印第二个括号的内容...
利用s三剑客命令去掉文件里的空行:
sed -i '/^$/d' test.txt
-i:编辑文件并保存
^$:空行
d:表示删除
//:匹配正则表达式
awk '/^[^$]/' test.txt
^[^$]:匹配非空行的开头,过滤出以非空行开头的行
grep -v "^$" test.txt
-v:过滤不要的
sed之增删改查:
①增
a 追加文本到指定行后
i 插入文本到制定行前
单行增加
sed '2a 106,dandan,CSO' test.txt
2a:表示第二行之后
106,dandan,CSO:表示追加的内容
sed '2i 106,dandan,CSO' test.txt
2i:表示第二行之前
sed '2a 106,dandan,CSO\n106,lalala,BOSS' test.txt
\n:换行
②删
sed '1d' test.txt
删除第一行
sed '1,3d' test.txt
删除1至3行
sed '1,+2d' test.txt
删除第1行和之后的2行
sed '1~2d' test.txt
删除1、3、5、7...奇数行
sed '/101/d' test.txt
删除内容为101的行
sed '/101/,/103/d' test.txt
删除内容101至103的行
sed '/101/,$d' test.txt
删除内容为101至内容末尾的内容
sed '/101/,5d' test.txt
删除内容为101至第五行的内容【如果5行内没有101的内容,sed软件会向下继续寻找包含101的内容并删除该内容的行】
sed '1,/101/d' test.txt
删除第一行到内容为101的行
sed '/101/,+2d' test.txt
删除内容为101的行以及它下两行
③改
s:单独使用→将每一行中第一个匹配的字符串进行替换==》sed命令
g:每一行进行全部替换==》sed命令s的替换标志之一,非sed命令
sed '2c 108,aaaaa,bb' test.txt
2c:修改第二行的内容
sed '2s#0#8#' test.txt
将第二行的第一个0修改为8
sed '2s#0#8#g' test.txt
将第二行的所有0修改为8
ls *jpg|sed -r 's#(^.*)_finished.*#mv & \1.jpg#g'|bash
&:代表(^.*)_finished.*这个正则命令
\1:代表(^.*)的内容
bash:运行这条命令
④查
p:输出指定内容,但默认会输出2次匹配的结果,因此使用-n取消默认输出
awk基本结构:
开始模块 /找谁/{干啥} 结束模块
awk BEGIN{coms} /pattern/{coms} END{coms}
ps:BEGIN和END模块只能有一个
'NR==2{print $1}NR==5{print $0}'
awk内置变量(预定义变量)
$0 当前记录
$1,$2...$n 当前记录的第n个字段,字段间由FS分割
FS 输入字段分隔符,默认是空格
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始
RS 输入的记录分隔符默认为换行符
OFS 输出字段分隔符,默认也是空格
ORS 输出的记录分隔符,默认为换行符
FNR 当前文件的读入记录号