1、LINUX 的 awk 和 sed 的常用用法 awk 的用法a w k 语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息调用 awk有三种方式调用 a w k,第一种是命令行方式,如:awk F : commands input-files第二种方法是将所有 a w k 命令插入一个文件,并使 a w k 程序可执行,然后用 a w k 命令作为脚本的首行,以便通过键入脚本名称来调用它。第三种方式是将所有的 a w k 命令插入一个单独文件,然后调用:awk f awk-script-file input-filesawk 脚本模式和动作在命令中调用 a w k 时,a w k
2、脚本由各种操作和模式组成。模式包括两个特殊字段 B E G I N 和 E N D。使用 B E G I N 语句设置计数和打印头。B E G I N 语句使用在任何文本浏览动作之前。E N D 语句用来在 a w k 完成文本浏览动作后打印输出文本总数和结尾状态标志。实际动作在大括号 内指明。域和记录$ 0,意即所有域 确保整个 a w k 命令用单引号括起来。 确保命令内所有引号成对出现。 确保用花括号括起动作语句,用圆括号括起条件语句。awk 中的正则表达式+ 使用+匹配一个或多个字符。? 匹配模式出现频率。例如使用/X Y?Z/匹配 X Y Z 或 Y Z。awk if($4/Brow
3、n/) print $0 tab2等效于awk $0 /Brown/ tab2内置变量awk print NF,NR,$0ENDprint FILENAME tab1NF 域的总数NR 已经读取的记录数FILENAME awk if(NR0 number=$3;if(owner/SYSADMIN/ print $0ENDprint “filename:“FILENAME tab1可以创建新的域awk BEGINNUM1=7;print “COL1“tCOL2“tCOL3“tCOL4“if($1=NUM1)$4=$1*$3;$2=“ORACLE“; print $0ENDprint “filen
4、ame:“FILENAME tab1打印总数:awk BEGINNUM1=7;print “COL1“tCOL2“tCOL3“tCOL4“if($1=NUM1)tot+=$3;$4=$1*$3;$2=“ORACLE“; print $0ENDprint “filename:“FILENAME “total col3:“ tot tab1使用此模式打印文件名及其长度,然后将各长度相加放入变量 t o t 中。ls -l | awk /d/ print$9“t“$5 tot+=$5ENDprint “total KB:“ tot内置字符串函数gsub 字符要用引号,数字不用awk gsub(/12
5、101/,“hello“) print $0 ENDprint FILENAME tab1awk gsub(/12101/,3333) print $0 ENDprint FILENAME tab1indexawk print index($2,“D“)“t“;print $0 tab1awk print index($2,“D“)“t“ $0 tab1lengthawk print length($2)“t“ $0 tab1maawk print match($2,“M“)“t“ $0 tab1splitawk print split($2,new_array,“_“)“t“ $0 tab1
6、sub 替换成功返回 1,失败返回 0awk print sub(/SYS/,“oracle“,$2)“t“ $0 tab1substrawk print substr($2,1,3)“t“ $0 tab1从 s h e l l 中向 a w k 传入字符串echo “Stand-by“ | awk print length($0)“t“$0 8 Stand-byfile1=“tab1“cat $file1 | awk print sub(/ADMIN/,“sss“,$2)“t“$0字符串屏蔽序列“ b 退格键 “ t t a b 键“ f 走纸换页 “ d d d 八进制值“ n 新行 “
7、c 任意其他特殊字符,例如“ “为反斜线符号“ r 回车键awk printf 修饰符- 左对齐Wi d t h 域的步长,用 0 表示 0 步长. p r e c 最大字符串长度,或小数点右边的位数如果用格式修饰输出,要指明具体的域,程序不会自动去分辨awk printf “%-2d %-10s %d“n“, $1,$2,$3 tab1输出结果9 SYSADMIN 121019 SYSADMIN 1210114 SYSADMIN 1210100000120029 SYSADMIN 121012 JLNQ 121012 JLNQ 121017 SYSADMIN 121017 SYSADMIN
8、121016 ac_ds_e_rr_mr 13333向一行 a w k 命令传值awk BEGINSYS=“SYSADMIN“if($2=SYS) printf “%-2d %-10s %d“n“, $1,$2,$3 tab1在动作后面传入awk if($2=SYS) printf “%-2d %-10s %d“n“, $1,$2,$3 SYS=“SYSADMIN“ tab1awk 脚本文件SED 用法sed 怎样读取数据s e d 从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直
9、到命令结束。调用 s e d 有三种方式使用 s e d 命令行格式为:sed 选项 s e d 命令 输入文件。记住在命令行使用 s e d 命令时,实际命令要加单引号。s e d 也允许加双引号。使用 s e d 脚本文件,格式为:sed 选项 -f sed 脚本文件 输入文件要使用第一行具有 s e d 命令解释器的 s e d 脚本文件,其格式为:s e d 脚本文件 选项 输入文件使用 s e d 在文件中定位文本的方式x x 为一行号,如 1x , y 表示行号范围从 x 到 y,如 2,5 表示从第 2 行到第5 行/ p a t t e r n / 查询包含模式的行。例如/ d
10、 i s k /或/a-z/ p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s /p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3x , / p a t t e r n / 通过行号和模式查询匹配行。3 , / v d u /x , y ! 查询不包含指定行号 x 和 y 的行。1 , 2 !sed 编辑命令p 打印匹配行= 显示文件行号a“ 在定位行号后附加新文本信息i“ 在定位行号后插入新文本信息d 删除定位行c“ 用新文本替换定位文本s 使用替
11、换模式替换相应模式r 从另一个文件中读文本w 写文本到一个文件q 第一个模式匹配完成后推出或立即推出l 显示与八进制 A S C I I 代码等价的控制字符 在定位行执行的命令组n 从另一个文件中读文本下一行,并附加在下一行g 将模式 2 粘贴到/pattern n/y 传送字符n 延续到下一输入行;允许跨行的模式匹配语句sed 编程举例打印单行 sed -n 2p quo*打印范围 sed -n 1,3p quote.txt打印有此模式的行 sed -n /disco/p quote.txt使用模式和行号进行查询 sed -n 4,/The/p quote.txt sed -n 1,/The
12、/p quote.txt 会打印所有记录?用.*代表任意字符 sed -n /.*ing/p quote.txt打印行号 sed -e /music/= quote.txt 或 sed -e /music/= quote.txt如果只打印行号及匹配行,必须使用两个 s e d 命令,并使用 e 选项。第一个命令打印模式匹配行,第二个使用=选项打印行号,格式为 sed -n -e /pattern/p -e /pattern/=。sed -n -e /music/p -e /music/= quote.txt先打印行号,再打印匹配行 sed -n -e /music/= -e /music/p quote.txt替换sed s/The/Wow!/ quote.txt保存到文件sed 1,2 w filedt quote.txt读取文件,在第一行后面读取sed 1 r sedex.txt quote.txt替换字符系列如果变量 x 含有下列字符串:x=“Department+payroll%Building G“要实现以下转换:+ to of % to located语句: echo $x | sed s/“+/ of /g | sed s/“%/ located /g