一、sed -r #插入字符 (常用)
sed -r ‘s/(.*)/aaa:&/’ #在所有行行首加上aaa
sed -r ‘s/(.*)/&:aaa/’ #在所有行行尾加上aaa
sed -r ‘1s/(.*)/aaa:&/’ #在行首加入aaa
sed -r ‘1,5s/(.*)/aaa:&/ 在第1到5行加入aaa
#s前写入数字或者范围就是具体数加的位置
sed追加(行后):a\命令
将this is a test line 追加到以test开头的行后面
sed ‘/^test/a\this is a test line ‘ file
在 1.txt文件第二行之后插入this is a test line :
sed -i ‘2a\this is a test line‘ 1.txt
sed插入(行前):i\命令
将this is a test line 追加到以test开头的行前面
sed ‘/^test/i\this is a test line ‘ file
在 1.txt文件第五行之前插入this is a test line :
sed -i ‘5i\this is a test line‘ 1.txt
二、
sed -i #修改文件内容
sed -i s#old_word#new_word#g #全局替换
三、awk
awk语法结构:
awk -F ‘:‘ ‘BEGIN{语句} {if(条件){语句1;语句2;语句3} } END{语句}‘ filename
#如果awk忽略了-F,默认将会以空格、空白字符为分隔符去打印
$NF #最后一段的内容
$NR #第几行的第几列,比如第一行第一列,第二行第二列
$0 #表示整行
例:(#重点,要掌握)
1;2:3#4,5 如何用:# ,三种间隔符分割为1 2 3 4 5
awk -F ‘: | # | ,‘ ‘{print $1,$2,$3,$4,$5}‘ 1.txt
四、以指定分隔符分隔
1、在print内段间插入"分隔符"
awk -F ‘:‘{print $1"#"$2"#"$3"#"$4"#"$5} 1.txt #以#做分隔符
2、通过内置变量OFS
awk -F ‘:‘ ‘{OFS="#"} {print $1,$2,$3,$4,$5} 1.txt #以#做分隔符
加上双引号”“之后,相当于sort不加-n。就代表1000不再是数字,而是一个字符串,是以ASSIC码计算的。
awk -F ":" ‘{$NR":"$NF}‘ passwd
第一行第一列 ,7段
第二行第二列 ,7段
第三行第三列 ,7段
第四行第四列 ,7段
第五行第五列 ,7段
第六行第六列 ,7段
第七行第七列 ,7段
awk -F ‘:‘ ‘$NF=="/sbin/nologin" {print $1}‘ /etc/passwd
#匹配最后一段为/sbin/nologin的行,然后输出该行的第一段
awk -F ‘:‘ ‘$3=$4 && $NF=="/sbin/nologin" {print $1}‘ /etc/passwd
#匹配第三段等于第四段且最后一列等于/sbin/nologin的行,然后输出第一段
awk -F ‘:‘ ‘{tot=tot+$3}; END {print tot}‘ passwd #某段求和
#total=0; total=total+$3 第三段第一行的tot加第三段第二行的tot,循环加到底
五、扩展
把一个目录下,过滤所以*.php文档中含有eval的行
grep -r --include="*.php" ‘eval‘ /data/