1、总结sed和awk的详细用法

sed:

语法结构

sed [OPTION]...'script' [input-file]...[action]

-r:支持扩展正则表达式

-n:不输出模式空间中的内容至屏幕

-e script1 -e script2 -e script3:指定多脚本运行

-f /path/to/script_file:从指定的文件中读取脚本运行

-i:直接修改源文件

sed的地址定界

#:#表示数字,指定行

$:最后一行

/pattern/或%pattern%:任何能被pattern匹配到的行

#,/pattern/:从第#行开始,到第一次被pattern匹配到的行结束,中间的所有行

#1,#2:从#1到#2行

/pattern1/,/pattern2/:从第一次被pattern1匹配到的行开始,到第一次被pattern2匹配到的行结束,中间的所有行

#,+n:从#行开始,一直到向下的n行

1~2:所有奇数行

2~2:所有偶数行

sed的编辑命令

d:删除模式空间中的行

=:为模式空间中的行打印行号

a \text:在行后面追加文本,支持使用\n实现多行追加

i \text:在行前面追加文本,支持使用\n实现多行追加

c \text:用text替换匹配到的行

p:打印模式空间中的行

s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;

替换标记:

g:全局替换;

w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;

p:显示替换成功的行;

w /path/to/somefile:保存模式空间匹配到的行至指定的文件中;

r /path/from/somefile:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;

高级编辑命令:

h:把模式空间中的内容覆盖至保持空间中;

H:把模式空间中的内容追加至保持空间中;

g:把保持空间中的内容覆盖至模式空间中;

G:把保持空间中的内容追加至模式空间中;

x:把模式空间中的内容与保持空间中的内容互换;

n:覆盖读取匹配到的行的下一行至模式空间中;

N:追加读取匹配到的行的下一行至模式空间中;

d:删除模式空间中的行;

D:删除多行模式空间中的所有行;

awk:

awk的运行模式有三种:

(1)awk 命令行

# awk

(2)awk 程序文件

# awk -f /path/from/awk_script

(3)awk 脚本

# !/bin/awk -f

awk的基本用法:awk [OPTION] 'program' FILE1 FILE2...

其中program:PATTERN{Action STATEMENT}

program:编程语言

PATTERN:模式

ACTION STATEMENT:动作语句,可以是由多个语句组成,各语句间使用分号隔离;

OPTONS:

-F[]:指明输入字段分隔符;

-v VAR_NAME=VALUE:变量赋值;

-f /PATH/FROM/AWK_SCRIPT;

awk在处理文本时也是一次读取一行文本,然后根据输入分隔符(默认为空格)进行切片,切成n个片段,然后将每一片都赋予awk内部的一个变量中进行保存,

这些变量名为$1、$2、$3...,awk就可以对这些片段单独处理,

awk的输出命令之print

用法:print item1,item2,...

item:字符串,用引号引用

print "hello","world"

变量:显示变量的值,可以直接使用变量的名进行引用

print name

数值:无需加引号

注:

(1)各item之间要使用逗号隔开,输出时的分隔符默认为空白字符

(2)输出的各item可以为字符串或数值,当前记录的字段($#),变量或awk的表达式;数值会被隐式转换为字符串进行输出

(3)print后面的item省略时,相当于运行“print $0”,用于输出整行

(4)输出空白字符 print " "

变量

分为内建变量和自定义变量

内建变量:

FS:input Field Seperator,输入字段分隔符,默认为空白字符

RS:input Record Seperator,输入时的行分隔符,默认为换行符

OFS:Output Field Seperatro,输出时的字段分隔符,默认为空白字符

ORS:Output Record Seperator,输出时的行分隔符,默认为换行符

NF:number of field in current record,当前行的字段数

print NF:显示当前行的字段数

print $NF:显示当前行的第NF字段的值

NR:number of records,行数;命令后跟的所有文件将统一合并计数

FNR:行数,各文件单独计数

FILENAME:当前正被awk读取的文件的文件名

ARGC:awk命令行中的参数的个数

ARGV:数组,保存了命令行参数本身

ARGV[index]

ARGV[0],ARGV[1]

自定义变量

(1)-v VAR_NAME=VALUE变量名区分字符大小写

(2)在program中自定义变量

awk的输出命令之printf格式化输出

语法:printf FORMAT,item1,item2,...

注:

(1)必须提供FORMAT

(2)与print语句不同,printf不会自动换行,需要显示指定换行符:\n

(3)FORMAT中需要分别为后面的每个item指定一个格式符,否则item无法显示

格式符:都以%开头,后面跟单个字符

%c:显示字符的ASCII码

%d,%i:显示为十进制整数

%e,%E:科学计数法或浮点数格式显示数值

%f:显示为浮点数

%g,%G:以科学计数法或浮点数格式显示数值

%s:显示为字符串

%u:显示无符号整数

%%:显示%符号自身

awk的操作符:

awk的操作符有:算术操作符、字符操作符、赋值操作符、比较操作符、模式匹配操作符、逻辑操作符、条件表达式和函数调用

算术操作符:实现一些算术运算

字符操作符:字符串连接

赋值操作符:通常为变量的赋值

=,+=,-=,*=,/=,%=,^=

++,--

比较操作符:字符串或者数值的大小比较

>,>=,

模式匹配操作符:根据右侧的模式进行匹配操作

~:是否能由右侧指定的模式所匹配

!~:是否不能由右侧指定的模式所匹配

逻辑操作符:进行逻辑的运算

&&:与运算

||:或运算

条件表达式:

selector?if-trun-expression:if-false-expression

函数调用:调用函数来进行数据的处理

格式:function_name(argu1,argu2,...)

PATTERN

(1)empty:空模式,匹配每一行;

(2)/regular expression/:仅处理能够被此处的模式匹配到的行;

(3)relational expression: 关系表达式;结果有“真”有“假”;结果为“真”才会被处理;

真:结果为非0值,非空字符串;

(4)line ranges:行范围,

startline,endline:/pat1/,/pat2/

注意: 不支持直接给出数字的格式

~]# awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd

(5)BEGIN/END模式

BEGIN{}: 仅在开始处理文件中的文本之前执行一次;

END{}:仅在文本处理完成之后执行一次;

常用的action

(1)Expressions

(2)Control statements:if, while等;

(3)Compound statements:组合语句;

(4)input statements

(5)output statements

控制语句

if(condition) {statments}

if(condition) {statments} else {statements}

while(conditon) {statments}

do {statements} while(condition)

for(expr1;expr2;expr3) {statements}

break

continue

delete array[index]

delete array

exit

{ statements }

数组

关联数组:array[index-expression]

index-expression:

(1)可使用任意字符串;字符串要使用双引号;

(2)如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空串”;

若要判断数组中是否存在某元素,要使用"index in array"格式进行;

weekdays["mon"]="Monday"

若要遍历数组中的每个元素,要使用for循环;

for(var in array) {for-body}

函数

内置函数

数值处理:

rand():返回0和1之间一个随机数;

字符串处理:

length([s]):返回指定字符串的长度;

sub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其第一次出现替换为s所表示的内容;

gsub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其所有出现均替换为s所表示的内容;

split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中;

自定义函数

2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符

# sed -r 's/^[[:space:]]+//' /boot/grub/grub.conf

3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符

# sed -r 's/^[#][[:space:]]+//' /etc/fstab

#

/etc/fstab

Created by anaconda on Thu Jun 15 06:05:04 2017

#

Accessible filesystems, by reference, are maintained under '/dev/disk'

See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

UUID=78793bbc-ce37-49e2-91c3-ce7119a6c9f3 / xfs defaults 0 0

UUID=b03e3066-407e-445a-8e11-08a1d91d042d /boot xfs defaults 0 0

UUID=cbe5fb6e-c8ca-4e7f-84a0-c19967b93c41 swap swap defaults 0 0

4、把/etc/fstab文件的奇数行另存为/tmp/fstab.3

# sed '1~2w /tmp/fstab.3' /etc/fstab

# cat /tmp/fstab.3

# /etc/fstab

#

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

UUID=78793bbc-ce37-49e2-91c3-ce7119a6c9f3 / xfs defaults 0 0

UUID=cbe5fb6e-c8ca-4e7f-84a0-c19967b93c41 swap swap defaults 0 0

5、echo一个文件路径给sed命令,取出其基名;进一步地,取出其路径名

# echo "/etc/fstab/xxxx/" | sed -r 's@^.*/([^/]+)/?$@\1@'

xxxx

6、统计指定文件中所有行中每个单词出现的次数

# awk '{for(i=1;i<=NF;i++){count[$i]++}}END{for(j in count){print j,count[j]}}' /PATH/TO/SOMEFILE

7、统计当前系统上所有tcp连接的各种状态的个数

# ss -tan | awk '!/^State/{state[$1]++}END{for(i in state){print i,state[i]}}'

8、统计指定的web访问日志中各ip的资源访问次数

awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/wp.access

9、写一个脚本:定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字;显示每个文件的行数

# vim logcount.sh

#!/bin/bash

#

declare -a rows

declare -a FileNames

for i in /var/log/*.log; do

rows=$(cat $i | wc -l)

FileNames=${i##*/}

printf "%-30s %s\n" $FileNames $rows

done

# bash -n logcount.sh

# bash logcount.sh

boot.log 236

vmware-vmsvc.log 413

vmware-vmusr.log 21

wpa_supplicant.log 19

Xorg.0.log 404

yum.log 723

10、写一个脚本,能从所有同学中随机挑选一个同学回答问题;进一步地:可接受一个参数,做为要挑选的同学的个数

#!/bin/bash

#

declare -a Students

Students=(Jose David Antonio Eric Victor Luke Ander Paul Michael Lukaku Mkhitaryan Rashford)

read -p "Please chose a number [1-${#Students[@]}]: " num

if [[ $num -lt 1 || $num -gt 12 ]];then

echo -e "An error choise!\nPlease chose from 1-${#Students[@]}"

exit 2

else

for ((i=0;i

do

x=$[$RANDOM % ${#Students[@]}]

echo ${Students[$x]}

Students[$x]=${Students[${#Students[@]}-1]}

unset Students[${#Students[@]}-1]

done

fi

# bash students.sh

Please chose a number [1-12]: 4

Eric

Ander

Lukaku

Antonio

11、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理

# visudo

centos ALL=(root) /sbin/fdisk, /sbin/mkfs, /sbin/mke2fs

12、授权gentoo用户可以运行逻辑卷管理的相关命令

# visudo

Cmnd_Alias LVADMINS_CMD=/sbin/lvchange,/sbin/lvdisplay,/sbin/lvmchange,/sbin/lvmdiskscan,/sbin/lvmsadc,/sbin/lvremove,

/sbin/lvs,/sbin/lvconvert,/sbin/lvextend,/sbin/lvmconf,/sbin/lvmdump,/sbin/lvmsar,/sbin/lvrename,/sbin/lvscan,/sbin/lv

create,/sbin/lvm,/sbin/lvmconfig,/sbin/lvmetad,/sbin/lvreduce,/sbin/lvresize,/sbin/pvchange,/sbin/pvck,/sbin/pvcreate,

/sbin/pvdisplay,/sbin/pvmove,/sbin/pvremove,/sbin/pvresize,/sbin/pvs,/sbin/pvscan,/sbin/vgcfgbackup,/sbin/vgck,/sbin/v

gdisplay,/sbin/vgimport,/sbin/vgmknodes,/sbin/vgrename,/sbin/vgsplit,/sbin/vgcfgrestore,/sbin/vgconvert,/sbin/vgexport

,/sbin/vgimportclone,/sbin/vgreduce,/sbin/vgs,/sbin/vgchange,/sbin/vgcreate,/sbin/vgextend,/sbin/vgmerge,/sbin/vgremov

e,/sbin/vgscan

gentoo ALL=(ALL) NOPASSWD:LVADMINS_CMD

13、基于pam_time.so模块,限制用户通过sshd服务远程登录只能在工作时间进行

# vim /etc/pam.d/sshd

account required pam_time.so

# vim /etc/security/time.conf

sshd;*;*;MoTuWeThFr0900-1800

14、基于pam_listfile.so模块,定义仅某些用户,或某些组内的用户可登录系统

# vim /etc/user_list

centos

fedora

# chmod 600 /etc/sshd_userlist

# vim /etc/pam.d/sshd

auth required item=user sense=allow file=/etc/users onerr=succeed

原创文章,作者:浙江-咲,如若转载,请注明出处:http://www.178linux.com/80423

java 奇数trun_N26-博客作业-week15相关推荐

  1. OO--第三单元规格化设计 博客作业

    OO--第三单元规格化设计 博客作业 前言 第三单元,我们以JML为基础,先后完成了 PathContainer -> Graph -> RailwaySystem 这是一个递进的过程,代 ...

  2. 【面向对象设计与构造】第一次博客作业

    [面向对象设计与构造]第一次博客作业 一.程序结构分析 1. 第一次作业 类图 由于第一次作业难度较低,实现起来也不需要很复杂的算法,因此在编写程序的时候只建立了两个类,Main类主要负责多项式的读入 ...

  3. OO第三次博客作业——规格

    OO第三次博客作业--规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  4. 2018091-2 博客作业

    此作业的要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2101 1.建博客 在 cnblogs.com (博客园)建账号.博客地址 ...

  5. BUAA_OO_博客作业3——规格

    BUAA_OO_博客作业3--规格 • 梳理JML语言的理论基础.应用工具链情况 JML是java modeling language的缩写,是一种描述性质的语言.有一定的语法规则. 这种语言被用来描 ...

  6. C博客作业00--我的第一篇博客

    这个作业属于哪个班级 C语言–网络2011/2012 这个作业的地址 C博客作业00–我的第一篇博客 这个作业的目标 学习Makdown语法,对本专业及C语言课程有个简单了解,记录自学慕课视频的笔记. ...

  7. 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档)

    计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 本源码技术栈: 项目架构 ...

  8. 第一周博客作业(补)

    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2101]. 2.博客作业 (1)回想一下你曾经对计算机专业的畅想 大学本 ...

  9. BUAA-2023软件工程第二次博客作业

    BUAA-2023软件工程第二次博客作业 项目 这个作业属于哪个课程 2023北航敏捷软件工程 这个作业的要求在哪里 个人作业-软件案例分析 我在这个课程的目标是 学习并实践软件工程开发的方法论.在把 ...

  10. 王歆瑶20190905-2博客作业

    此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/5522 1.建博客 在 cnblogs.com (博客园)建账号 我的博客 ...

最新文章

  1. 经管资源库项目的总结笔记
  2. MySQL的几个概念:主键,外键,索引,唯一索引
  3. MySql入门笔记二~悲催的用户
  4. python堆栈与队列_python:用deque实现栈,队列和保存最后的N个元素
  5. array python 交集_Python基础(二)——列表和元组
  6. [hihoCoder 1384]Genius ACM
  7. 插入排序 - python实现
  8. 干干净净用java_十四步 干干净净卸载Oracle
  9. Spring Boot的RestTemplate 之exchange方法
  10. windows批量重命名
  11. swc反编译工具_ffdec 10.0|ffdec(flash反编译工具)下载v10.0.0官方最新版 - 欧普软件下载...
  12. mirth connect 3.4 添加java到js代码中
  13. CF机器码怎么解-LOL机器码怎么改?(最详细教程CX)
  14. u盘被写保护无法格式化
  15. C/C++常用工具一览
  16. python:maya 一个人性化的时间处理库
  17. R730服务器内存扩展安装
  18. vba-msgbox用法详解
  19. 【品牌DTC增长力】从AIPL模型看策略趋势
  20. SAP找出查询透明表的文本表

热门文章

  1. In-band network telemetry
  2. 你真的理解了MVC, MVP, MVVM吗?
  3. 三十岁it人的一些经历
  4. 六祎-实现微信支付宝QQ钱包三块合一收款码
  5. 如何将华为NFC手机模拟成实体门禁卡、考勤卡
  6. 【POJ3683】Priest John's Busiest Day
  7. 区块链全球社区协作工具,就用超级表格!
  8. C++设计模式(全23种)
  9. 真的不明白,怎么会这样!
  10. 二进制、八进制、十六进制的写法