一、部分字符说明:

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           当前文件的读入记录号