linux命令之awk、sed

awk:主要处理每一行的字段内的数据,默认的字段分割符为空格或TAB键

awk '条件类型1{动作1}  条件类型2{动作2}  .........' filename

举例:

last -n 5:将登录者数据取出来(前5行)

last -n 5 | awk '{print $1 "\t" $3}'      取出前5个登录信息,并将第一个字段和第三个字段打印出来,中间用tab隔开

注意:$0代表一整行数据

awk的内建变量:

linux命令之awk、sed

last -n 5 | awk '{print $1 "\t cur line:"  NR "\t total fields:" NF}'

awk的逻辑运算符:

linux命令之awk、sed

举例:在/etc/passwd中查找,UID小于10,并且只列出第一栏和第三栏数据

cat /etc/passwd | awk '{FS=":"} $3<10{print $1 "\t" $3}'     会发现,第一行没有正确显示

linux命令之awk、sed

如下即可:cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10{print $1 "\t" $3}'

linux命令之awk、sed

linux命令之awk、sed

linux命令之awk、sed

linux命令之awk、sed

linux命令之awk、sed

我的例子:

cat /etc/passwd | awk '{FS=":"}
NR>=2{he=$3+$4
printf "%s+%s=%s \n",$3,$4,he}'

注意printf可以格式化输出

sed:

sed是个管道命令

sed [-nefr] [动作]

linux命令之awk、sed

linux命令之awk、sed

列出/etc/passwd的内容并打印行号,将2-5行删除

nl /etc/passwd | sed '2,5g'

删除第3行到最后一行

nl /etc/passwd | sed '3,$d'      $代表最后一行,正则表达式的规则

承上,在第2行后加内容

nl /etc/passwd | sed '2a drink tea'

如果是在第2行前:

nl /etc/passwd | sed '2i drink tea'

整行取代,将2-5行替换为“drink tea”

nl /etc/passwd | sed '2,5c drink tea'

进列出5-7行内容

nl /etc/passwd | sed -n '5,7p'       参数-n:安静模式

部分数据的搜索与取代:

sed 's/旧字符串/新字符串/g'

举例;截取eth0网卡的IP地址

ifconfig eth0 | grep 'inet' | sed 's/.*inet //g' | sed 's/ *netmask.*$//g'