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

原创文章,作者:N25_随心,如若转载,请注明出处:http://www.178linux.com/73655

(0)
N25_随心N25_随心
上一篇 2017-05-15
下一篇 2017-05-15

相关推荐

  • 企业实时同步方案—-Sersync介绍

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1433109 Sersync 项目利用 Inotify 和 Rsync 技术实现对服务器数据实时同步的解决方案,其中 Inotify 用于监控 Sersync…

    Linux干货 2016-08-15
  • 文件的归档和压缩

    文件的归档和压缩 •一、tar命令使用 •二、其他压缩方式 •三、进程管理基本概念。 前言: 本节主要介绍文件的归档和压缩相关方法。归档和压缩有利于linux系统中文件的管理和磁盘空间的利用,善于利用归档和压缩能为我们工作中带来很多便捷。另外将简单介绍进程的一些概念,方便下一节进程管理内容的学习。 一、 tar命令使用(tar命令用于文件…

    2017-04-16
  • CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}

    CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;} CentOS软件安装主要由3种方式,第一种是源码包安装,需要从网站下载并解压之后通过手动编译的方式安装,过程相对比较复杂;第二种是rpm包安装,通过rmp这个包管理器实现程序的安装、升级、卸载等操作,rpm包管理器是RPM Package Manager的简称,功能非常强大,…

    Linux干货 2016-08-24
  • LVM详解

    Linux的LVM详解 LVM组成; LVM:logic volume manager .LVM即逻辑卷管理,现在使用版本为第二版,即version2 逻辑卷:pv,physical volume,即计算机上的磁盘设备,例如我的计算机上的/dev/sda3,/dev/sda5. 卷组:vg,volume group。一般由多个pv组成。 逻辑卷:lv,log…

    Linux干货 2016-02-14
  • 堡垒机-麒麟开源堡垒机 V 1.3 正式发布

    麒麟开源堡垒机团队经过1个月的努力,发布V 1.3版本,本版本主要收集了5月开发的小功能,并且增加了大用户量、大设备量,纵深目录层级的优化支持,产品 V1.3  光盘主要新增功能如下(相对 V1.2光盘) 1.增加苹果MAC OS系统客户端的WEB访问支持 2.增加CA认证支持,内置CA证书  3.增加ssh 公私钥认证方式中,私钥中有密…

    Linux干货 2016-06-09
  • 梦想走向现实的地方

    曾经羡慕打字快的同学指尖能在键盘上优雅地跳舞,于是我有努力练习打字。 曾经羡慕同事能很神奇地把一个交换机的端口关闭,让那端口下面的人都不能上网,于是我努力学习交换机、路由。 现在我羡慕一个人能管很多服务器的人,于是我开始学习linux了。 努力成为一个也能管很多服务器的人,因为我也想别人叫我运维工程师

    Linux干货 2016-10-25

评论列表(1条)

  • 马哥教育
    马哥教育 2017-06-20 10:15

    写的很好,为什么中间部分的排版跟别的不一样那