java 奇数trun_N26-博客作业-week15
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相关推荐
- OO--第三单元规格化设计 博客作业
OO--第三单元规格化设计 博客作业 前言 第三单元,我们以JML为基础,先后完成了 PathContainer -> Graph -> RailwaySystem 这是一个递进的过程,代 ...
- 【面向对象设计与构造】第一次博客作业
[面向对象设计与构造]第一次博客作业 一.程序结构分析 1. 第一次作业 类图 由于第一次作业难度较低,实现起来也不需要很复杂的算法,因此在编写程序的时候只建立了两个类,Main类主要负责多项式的读入 ...
- OO第三次博客作业——规格
OO第三次博客作业--规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- 2018091-2 博客作业
此作业的要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2101 1.建博客 在 cnblogs.com (博客园)建账号.博客地址 ...
- BUAA_OO_博客作业3——规格
BUAA_OO_博客作业3--规格 • 梳理JML语言的理论基础.应用工具链情况 JML是java modeling language的缩写,是一种描述性质的语言.有一定的语法规则. 这种语言被用来描 ...
- C博客作业00--我的第一篇博客
这个作业属于哪个班级 C语言–网络2011/2012 这个作业的地址 C博客作业00–我的第一篇博客 这个作业的目标 学习Makdown语法,对本专业及C语言课程有个简单了解,记录自学慕课视频的笔记. ...
- 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档)
计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 本源码技术栈: 项目架构 ...
- 第一周博客作业(补)
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2101]. 2.博客作业 (1)回想一下你曾经对计算机专业的畅想 大学本 ...
- BUAA-2023软件工程第二次博客作业
BUAA-2023软件工程第二次博客作业 项目 这个作业属于哪个课程 2023北航敏捷软件工程 这个作业的要求在哪里 个人作业-软件案例分析 我在这个课程的目标是 学习并实践软件工程开发的方法论.在把 ...
- 王歆瑶20190905-2博客作业
此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/5522 1.建博客 在 cnblogs.com (博客园)建账号 我的博客 ...
最新文章
- 经管资源库项目的总结笔记
- MySQL的几个概念:主键,外键,索引,唯一索引
- MySql入门笔记二~悲催的用户
- python堆栈与队列_python:用deque实现栈,队列和保存最后的N个元素
- array python 交集_Python基础(二)——列表和元组
- [hihoCoder 1384]Genius ACM
- 插入排序 - python实现
- 干干净净用java_十四步 干干净净卸载Oracle
- Spring Boot的RestTemplate 之exchange方法
- windows批量重命名
- swc反编译工具_ffdec 10.0|ffdec(flash反编译工具)下载v10.0.0官方最新版 - 欧普软件下载...
- mirth connect 3.4 添加java到js代码中
- CF机器码怎么解-LOL机器码怎么改?(最详细教程CX)
- u盘被写保护无法格式化
- C/C++常用工具一览
- python:maya 一个人性化的时间处理库
- R730服务器内存扩展安装
- vba-msgbox用法详解
- 【品牌DTC增长力】从AIPL模型看策略趋势
- SAP找出查询透明表的文本表