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的内建变量:
last -n 5 | awk '{print $1 "\t cur line:" NR "\t total fields:" NF}'
awk的逻辑运算符:
举例:在/etc/passwd中查找,UID小于10,并且只列出第一栏和第三栏数据
cat /etc/passwd | awk '{FS=":"} $3<10{print $1 "\t" $3}' 会发现,第一行没有正确显示
如下即可:cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10{print $1 "\t" $3}'
我的例子:
cat /etc/passwd | awk '{FS=":"}
NR>=2{he=$3+$4
printf "%s+%s=%s \n",$3,$4,he}'
注意printf可以格式化输出
sed:
sed是个管道命令
sed [-nefr] [动作]
列出/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'