内容简介:net25 第15周作业
1、总结sed和awk的详细用法;
SED
sed模式空间 默认不编辑源文件,仅对模式空间中的数据做处理:而后,处理结束后,将模式空间打印屏幕 sed [options]'address+command' file... -n:静默模式,不再默认显示模式空间的内容 -i:直接修改原文件 -e script -e script 同时执行多个脚本 -f /path/to/script file -r :表示使用扩展正则表达式 address: 1.startline,endline 比如1,100 2./regexp/ /^root/ 3./pattern1/,/pattern2/ 第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所以行 4.linenumber 指定行 5.startline,+N 从startline开始,向后的n行 6.步进行 1~2 奇数行 2~2 偶数行 7.$ 最后一行 command: d:删除符合条件的行 P: 显示符合条件的行 a \string:在指定的行后面追加新行,内容为“string” i \string:在指定的行前面追加新行,内容为“string” c \string:将匹配到的的行替换为此处指定的文本text r file:文件合并 w file:将地址指定的范围内的行另存为至指定文件中 =:为模式匹配到的行数的行打印行号 !取反 地址定界!编辑命令 s/pattern/string/修饰符:查找并替换,默认只替换每一行被模式匹配到的字符串 加修饰符 g:全局替换 i:忽略字符大小写 w /path/to/somefile:将替换成功的结果保存至指定文件中 p:显示替换成功的行 s///=s###=s@@@ \(\),\1,\2 sed ‘s/l..k/&r/g’ sed 's/\(l..k\)/\1r/g ' &:引用匹配模式的整个串 高级编辑命令 h:表示把模式空间的内容保存至保持空间 H:把模式空间中的内容追加至保持空间 g:把保持空间的内容覆盖至模式空间 G:把保持空间的内容追加至模式空间 x:把模式空间的内容与保持空间中内容互换 n:读取匹配到行的下一行至模式空间 N: 追加读取匹配到的行的下一行至模式空间中 D:删除多行模式空间中所有行
AWK
内建变量 FS:input field seperator,默认为空白字符 OFS:output field seperator,默认为空白字符 RS:input record seperator,输入时的换行符 ORS:outpout record seperator,输出时的换行符 NF:number of filed,字段数量 {print NF},{print $NF} NR:number of record,行数 FNR:各文件分别计数,行数 FILENMAE当前文件名字 ARGC: 命令行参数的个数 ARGV: 数组,保存的是命令行所给定的各参数 printf命令 格式化输出:printf format,item1,item2... (1)format必须给出 (2)不会自动换行,需要显式给出换行符,\n (3)format中需要分别为后面的每个item指定一个 格式化符号 %c:显示字符串的ascii码 %d,%i:显示十进制整数 %e,%E:科学计数法数值显示 %f,显示为浮点型 %g,%G:以科学计数法或浮点型形式显示数值 %s:显示字符串 %u:无字符串 %%:显示%本身 条件表达式: selector?if-true-expression:if-false-expression eg: awk -F: '{$3>=1000?usertype='common user':usertype="system admin";printf "%15s:%-s\n",$1,usertype}' awk -F: 'printf "%15s:%-s",%1,(%3>1000?"common user":"system user")' pattern (1)empty 空模式,匹配每一行 (2)/regular expression/:仅处理能够被此处的模式匹配到的行 (3)relational expression:关系表达式,结果有“真”有“假”,结果为真才会处理 eg: awk -F':' '$NF==/bin/bash {print $1,$NF}' /etc/passwd awk -F':' '$NF~/bash$/ {print $1,$NF}' /etc/passwd line range:行范围 startline,endline:/pat1/,/pat2/ 注意;不支持直接给出数字的格式 ~]# awk -F : '(NR>=2&&NR<=10){print $1}' /etc/passwd BEGIN/END模式 BEGIN{}:仅在开始处理文件中文本之前执行一次 END{}:仅在文本处理完成之后执行一次 常见的action (1)expression (2)control statements: if,while等 (3)compound statement:组合语句 (4)input statement (5)output statement 控制语句 if(condition){statment} if(condition){statment} else {statement} while(condition){statement} do{statement} while(codition) for(exp1,exp2,exp3){statement} break continue delete arry[index] delete arry exit {statement} if-else 语法:if(condition) statement [else statement] awk -F: '{if($3>1000) print $1,$3}' /etc/passwd awk -F: '{if($3>=1000) {printf "common user: %s\n",$1} else {printf "root or system:%s\n",$1} }' /etc/passwd 使用场景:对awk取得的整行或某个字段做条件判断; while循环 语法:while(condition) statement 使用场景:对一行内的多个字段逐一类似处理时使用,对数组中逐一处理时使用 awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}' /boot/grub2/grub.cfg awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>7){print $i,length($i)}; i++}}' /boot/grub2/grub.cfg do-wile循环 语法:do statement while(condition) 意义;至少执行一次循环 for循环 语法:for(epr1;epr2;epr3) statement awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /boot/grub2/grub.cfg awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {if(length($i) > 7){print $i,length($i)}}}' /boot/grub2/grub.cfg 特殊用法: 能够遍历数组中的元素: 语法: for(var in arry) (for-body) switch语句 语法:switch(expression){case VALUE or /REGEXP/:statement;case VALUE2 or /REGEXP2/: statement;...;default:statement} break和continue break [n] continue next 提前结束对本行的处理而直接进入下一行 awk -F: '{if($3%2!=0) next;print $1,$3}' /etc/passwd awk 数组 关联数组:array[index-expression] index-expression: (1)可使用任意字符串,字符串要加双引号 (2)如果某组元素事先不存在,在引用时,awk会自动创建此元素,并将某值初始化为“空串”: 若要判断数组中是否存在某元素,要使用“index in array”格式进行 若要遍历数组中的每个元素,要使用for循环 awk 'BEGIN{weekdays["mon"]="monday";weekdays["tue"]="tuesday";for(i in weekdays) {print weekdays[i]}}' 注意:var会遍历array的每个索引 netstat -nta | awk '/^tcp\>/{state[$NF]++}END{for(i in state){print i,state[i]}}' 统计指定文件中每个单词出现的次数 awk '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count){print i,count[i]}}' /etc/fstab
2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符;
vim: %s@^[[:space:]]+@@g
sed:sed -i -r ‘s/^[[:space:]]+//g’ /boot/grub/grub.conf
3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符;
vim: %s@^#[[:space:]]+@@g
sed: sed -i -r ‘s/^#[[:space:]]+//g’ /etc/fstab
4、把/etc/fstab文件的奇数行另存为/tmp/fstab.3;
sed: sed -n ‘1~2p’ /etc/fstab > /tmp/fstab.3
sed: sed ‘n;d’ /etc/fstab > /tmp/fstab.3
5、echo一个文件路径给sed命令,取出其基名;进一步地,取出其路径名;
echo “/etc/fstab/tab” | sed -r -n ‘s@^/.*/([^/]+$)@\1@p’
echo “/etc/fstab/tab/tab1” | sed -r -n ‘s@(^/.*/)[^/]+$@\1@p’
6、统计指定文件中所有行中每个单词出现的次数;
awk ‘{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count){print i,count[i]}}’ /boot/grub/grub.conf
7、统计当前系统上所有tcp连接的各种状态的个数;
netstat -nta | awk ‘/^tcp>/{count[$6]++}END{for(i in count){print i,count[i]}}’
8、统计指定的web访问日志中各ip的资源访问次数:
awk ‘{count[$1]++}END{for(i in count){print i,count[i]}}’ access.log
9、写一个脚本:定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字;显示每个文件的行数;
#!/bin/bash declare -A logs for i in `ls /var/log/*.log`;do log_lines=`wc -l $i` logs[$i]=$log_lines echo "${logs[$i]}" done
10、写一个脚本,能从所有同学中随机挑选一个同学回答问题;进一步地:可接受一个参数,做为要挑选的同学的个数;
#!/bin/bash if [ $1 ];then for((i=1;i<=$1;i++));then a=$[$RANDOM%11] echo $a else a=$[$RANDOM%11] echo $a fi
11、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理;
visudo centos ALL=(root) NOPASSWD:/usr/sbin/fdisk /usr/sbin/mkfs /sbin/mke2fs
12、授权gentoo用户可以运行逻辑卷管理的相关命令;
visudo Cmnd_Alias LVM=/sbin/pvcreate /sbin/vgcreate /sbin/lvcreate /sbin/vgextend /sbin/lvextend gentoo ALL=(root) NOPASSWD:LVM
13、基于pam_time.so模块,限制用户通过sshd服务远程登录只能在工作时间进行;
~]# vim /etc/pam.d/sshd #%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account required pam_time.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth ~]# /etc/security/time.conf sshd;*;root;Wk0900-1800
14、基于pam_listfile.so模块,定义仅某些用户,或某些组内的用户可登录系统;
]# vim sshd #%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account required pam_listfile.so item=user sense=allow file=/etc/user_allow onerr=succeed account required pam_time.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth ~]# vim /etc/user_allow root ~]#chmod 600 /etc/user_allow
以上所述就是小编给大家介绍的《net25 第15周作业》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hacking Growth
Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00
The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!