Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1733619
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类:

2011-09-02 18:14:23

原文地址:shell文本处理 作者:rayzhang11

VAR="The quick brown fox jumped over the lazy dog."
# 显示特殊域
echo $VAR|awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9}'

# 默认空格为分隔符
echo $VAR|awk  '{print $0}'

# 指定分隔符
echo $VAR|awk -Fo '{print $1,$2,$3,$4,$5}'

# 简单模式匹配
awk '$2 == "ftp"{print $0}' /etc/hosts
awk '$1 ~ /^172|^127/ {print $0}' /etc/hosts

# 确定域的个数NF
echo $VAR|awk '{print NF}'
echo $VAR|awk '{print $NF}'
# 返回最后一个域值
echo $VAR|awk '{print $(NF-1)}'

# 给awk传值
TheCount=3
echo $VAR|awk -v counter=$TheCount '{print $counter}'
echo $VAR|awk '{print $counter}' counter=$TheCount

# 一定条件下使用awk
node=casper
awk -v NODE=$node '$2 == NODE {print $3}' /etc/hosts

# 显示域范围的主要方法
# printf 不换行打印;print换行打印
echo $VAR |awk '{ for (i=1;i<=NF;i++) {printf "%s ",$i}; print ""}'
end=6
echo $VAR |awk '{ for (i=1;i<='$end';i++) {printf "%s ",$i}; print ""}'

# 使用awk确定串的长度
# length 是一个保存当前行字符数的内部变量
echo $VAR |awk '{print length}'

# 使用expr确定字符串长度 
expr length "$VAR"

# 使用awk显示字串的命令
# substr($3,2,3),第三个域值从第二位置之后的三个字符
echo $VAR |awk '{print substr($3,2,3)}'

# 使用expr显示字串
expr substr "$VAR" 12 3

# 使用sed简单的查找替换
# 以tab和换行代替空格
echo $VAR |sed -e 's/ /\t/g'
echo $VAR |sed -e 's/ /\n/g'

# 忽略空行和注释行
sed -e 's/#.*//g' ./ex_24|awk '{if(length !=0) print $0}'

# sed进行双查找和替换
# 存在quick的行进行he向she转化
echo $VAR |sed -e "/quick/s/he/she/g"

# sed过滤行
# 删除第一行
ps -ef |sed -e '1d'

# egrep查找多个串
egrep "desktop|mysql|ntp" /etc/passwd

# 查找进程表的一个清理方法
ps -ef |grep sshd |grep -v grep
ps -ef |grep [s]shd

# awk列求和
ls -l |awk '{total+=$2} END {print total}'
ls -l |awk '{total+=$2} END {print total/1024/1024}'

# 使用awk产生随机数
# srand()产生随机数0~1
echo |awk '{srand();print int(100*rand())}'

# shell中的随机数RANDOM:0~32767
echo $RANDOM

# 基于字符的域
# (.)一个字符 (.*)任意多个字符 (...)连续3个字符
echo $VAR
echo $VAR |sed 's/\(.*\)\(...\)$/\1/'
echo $VAR |sed 's/\(....\)\(.*\)\(...\)$/\1\3/'

# 转义字符
some_var="$.&/20\"
some_var=`echo $some_var |sed -e s/[.]/\\\\\\\./g`
some_var=`echo $some_var |sed -e s/[$]/\\\\\\\\$/g`
some_var=`echo $some_var |sed -e s/\&/\\\\\\\\\&/g`
some_var=`echo $some_var |sed -e s/[/]/\\\\\\\\\\\//g`
echo $some_var

# 使用awk返回模式匹配行之前的一行
# NR行记录数
echo ""
awk '/casper/{print pNR,p0}{pNR=NR;p0=$0}' /etc/hosts
echo ""
awk '/casper/{print ppNR,pp0,"\n",pNR,p0}{ppNR=pNR;pNR=NR;pp0=p0;p0=$0}' /etc/hosts
echo ""
awk '{for(j=0;j<='prevlines+1';j++){a[j]=a[j+1];a['prevlines+1']=$0}} /casper/{{print "Entry"}{for(k=0;k<'prevlines+1';k++){print a[k]}}}' /etc/hosts
echo ""
awk '{for(j=0;j<=4;j++){a[j]=a[j+1];a[4]=$0}} /casper/{{print "Entry"}{for(k=0;k<3;k++){print a[k]}}}' /etc/hosts
阅读(412) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~