Linux学习03之Vi编辑器&正则表达式&文本分析&用户与权限

1.vi全屏编辑器的使用

内容图图1
内容图图2
内容图图3
练习vi的基本命令:

cp /etc/profile /a/profile     // 从etc下复制profile文件到文件/a下
vi profile                     // 常规打开profile,进入全屏模式
vi profile +3                  // 打开profile,光标定位到第三行
vi profile +33  按住insert,输入:,此时进入末行模式,系统会接收输入的命令,
此时输入set nu,表示行号展示,再次看,会看到光标前面有33
------------------------------------------------------------
tips:几个小的编辑时候的技巧
vi profile   // 进入编辑器,此时定位是第一行
shift + o    // 表示在原始的编辑模式下,在第一行前面插入行,进入插入模式inset
o            // 表示在原始的编辑模式下,在第一行的后面插入行,进入插入模式
i            // 表示进入插入模式,此时的插入是从光标前面开始插入
a            // 表示进入插入模式,此时的插入是从光标后面插入
shift + a    // 表示A,此时定位到整行的尾端
shift + i    // 表示I,此时定位到整行的首端
-----------------------------------------------------------------
vi profile   // 初始进入编辑模式,按insert进入插入模式
esc          // 表示退出插入模式,此时可以进行下面的操作
注意命令行模式需要从编辑模式进入,插入模式是不能直接进入命令行模式的!!!!
:q           // 文件没更改,推出
:wq         // 文件被更改,保存推出,对于修改的文件不后悔
:q!         // 不保存退出,也就是对于修改的文件后悔了
:w          // 保存
:w!         // 强制保存
:wq  == :x  // 两者等同 

内容图图4
内容图图5
内容图图6

vi编辑模式的相关快捷键

快捷键 含义
h 光标前移
j 光标下移
k 光标上移
l 光标后移
w 移至下一个单词词首
e 移动当当前单词末尾或者下一个单词末尾
b 移动到当前单词头部或者上一个单词头部
0 绝对行首
^ 行首的第一个非空字符
$ 绝对行尾
G 直接定位文章末行
3G 直接定位第三行
gg 直接定位第一行
ctrl+f 向下翻页
ctrl+b 向上翻页
快捷键 含义
dd 删除一行
dw 删除一个单词
x 删除光标位置字符
3x 删除从光标开始的后面3个字符
r 替换光标位置的字符
p 粘贴
yw 复制一个单词
yy 复制一行
u 撤销操作
ctrl+r 恢复撤销的操作
. 重复上一次的动作
/ esac 查找esac
n 接上面查找时候向下查找,否则只能看到第一个
N 接上面查找时候向上查找,否则只能看到第一个
!ls /a 表示在此显示/a目录下的内容
快捷键 含义
s/str1/str2 替换字符串,原始的字符串str1,替换的字符串str2
/ 为临近字符串的边界字符,可以使用/、@、#替换
g 表示一行内全部替换
i 表示忽略大小写
查找替换范围 -------------------------
n 表示当前行号
. 表示当前光标行
+n 表示偏移n行
$ 表示末尾行,$-3倒数三行
% 表示全文

示例替换的用法:

// 表示范围为当前光标到最后一行,after替换为before,全行忽视大小写
.,$s/after/before/gi      
.,$d   // 删除当前光标到最后一行的内容
%d     // 删除所有的内容

2.正则表达式学习

内容图图7
内容图图8

正则表达式的使用:

正则表达 含义
/ 转义字符
. 匹配任意字符
[^0-9] 非数字,其中的^表示非
^ 表示正则以什么开头
$ 表示正则以什么结尾
\<aabb\> 表示匹配aabb单词,首尾需要转义
| 连接符
(,) 选择操作符
? 匹配0次或者一次
* 匹配0到多次
+ 匹配1到多次
{n} 匹配n次
{n,} 匹配n到多次
{n,m} 匹配n到m次
.* 匹配任意字符
/n 反向引用,n表示第几个括起来的表达式

3.cut&wc&sort&sed&awk学习

内容图图9
内容图图10

文本分析键 含义
cut 显示切割的行数据
-f 选择显示的
-d 自定义分隔符
-s 不显示没有分隔符的行

示例:

cut -d' ' -s -f1-3 grep.txt  
// 表示自定义分隔符为' ',不展示没有分隔符的行,显示满足条件的1-3列,文件为grep.txt
文本分析键 含义
sort 排序文件的行,直接排序默认按照字典序
-n 按数值排序
-r 倒序排列
-t 自定义分隔符
-k 选择排序,一般和分隔符配合使用
-u 合并相同行
-f 忽略大小写

示例:

sort -t' ' -n  -r -k2 sort.txt
// 表示对sort.txt文件排序,文件按照' '分隔符来,第二列按照数值排序,倒序排列
sort -t' ' -n -k2 sort.txt
// 与上例子差不多
文本分析键 含义
wc 全称word count,单词统计
-c 统计文件所有的字节数
cat -A file 可以查看到文件所有字节,包括cat file不可见的
-m 统计文件字符数
-l 统计文件中的行数
-w 统计文件中的单词数

示例:单一的wc命令的结果会附加上文件,要想去除文件名,需要使用管道来过滤

wc sort.txt // 默认显示所有行数,单词数,字节数
wc -c sort.txt // 显示所有字节数
wc -m sort.txt // 显示所有字符数
wc -l sort.txt // 显示文件的行数
// 管道过滤文件名
cat sort.txt | wc -c   // 显示所有字节数,过滤文件名

内容图图11
内容图图12
内容图图13

sed命令 含义
sed 行编辑器
-n 静默模式,不再默认显示模式空间中的内容
-i 直接修改原文件
-e 可以同时执行多个脚本
-r 表示使用扩展正则表达式
d 删除符合条件的行
p 显示符合条件的行
2a\string 表示在第二行的行后面追加新行,内容为string
2i\string 表示在第二行的行前面追加新行,内容为string
s/pattern/string/ vi编辑其中的替换同样有效
/str/ 查找指定行

示例:

sed -i "2p" sort.txt  // 复制第二行的内容并写入文件
sed -n "2p" sort.txt  // 静默模式,只显示当前的内容
sed "2d" sort.txt     // 删除第二行内容
sed "/hello/d" sort.txt // 删除指定的hello
sed "2a\hello" sort.txt // 在第二行之后添加hello
sed "2i\hello" sort.txt // 在第二行之前添加hello
sed "s/\(id:\)[0-9]\(:initdefault:\)/\18\2/" inittab 
// 在inittab中利用正则表达式查找内容并替换

sed利用正则表达式实现ip地址的匹配并修改IP地址:
在这里插入图片描述
示例:
解释一下如何匹配标准的IP地址,都知道IP地址由4段组成,地址理论上是可以为255.255.255.255,但是在实际的生活中我们所见的IP地址由为8.8.8.8的,也有192.168.87.101等等。
分析得到:

位数 取值范围
1 [0-9]
2 [1-9][0-9]
3 1[0-9][0-9]
3 2[0-4][0-9]
3 25[0-5]

由上述分析可以得到:匹配修改我们linux的IP地址可以直接使用
sed "s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\199/" -i ifcfg-eth0

sed "s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\199/" -i ifcfg-eth0
// 上述的可以直接写入,使用的是正则表达式 

内容图图14
内容图图15
内容图图16

awk常用的形式:awk -F':' '{pattern+action} fileName',其中-F表示是否需要以特定字符分割行,注意,次数必须使用单引号,因为有些内容需要双引号来表示需要输出!

awk命令 含义
awk 文本分析工具
NR 表示行号
NF 表示这一行的列数

示例:

// 显示/etc/passwd的账户
awk -F':' '{print $1}' passwd   // 表示以:分割,打印出第一列
cut -d':' -f1 passwd            // cut也能实现
// 只显示账户与shell列(第七列)
awk -F':' '{print $1 "\t" $7}' passwd   // 以:分割,打印第一和第七列
// 显示账户和shell列,并且头部添加name/shell,尾部添加blue,/bin/bash
awk -F':' BEGIN'{ "name\tshell"} {print $1 "\t" $7} END{ "blue,\t/bin/bash"}' passwd
// 统计passwd文件中,每行的行号,每行的列数,对应的完整行内容
awk -F':' '{print NR "\t" NF "\t" $0}' passwd   // NR行号,NF列数,$0这一行的所有内容
// 查询含有root的行,打印这一行
awk '/root/{print $0}' passwd  // 不需要分割所以不使用-F,/root/表示查找 $0表示一行内容

awk的报表功能:统计如下报表中所有人一月份的工资,0为manager,1为worker

Tom   0   2012-12-11   car   3000
John  1   2013-01-13   bike  1000
vivi  1   2013-01-18   car   2800
Tom   0   2013-01-20   car   2500
John  1   2013-01-28   bike  3500
------------------结果为------------
vivi	worker	2800
Tom	    manager	2500
John	worker	4500

实现:
awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5};}END{for( i in name){print i "\t" name[i]}} ' awk.txt
解释:首先分割日期,使用date来存储,分隔符为-,如果date[2]为01,表示一月份,此时将工资放入name中,也就是名字$1与工资$5对应,同名相加。最后遍历输出即可。
此时得出的结果是

vivi	2800
Tom	    2500
John	4500

实现角色写入,由于角色是需要在大前提01月份,所以实现如下:
awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5};if($2=="0"){role[$1]="manager"}else{role[$1]="worker"}}END{for(i in name){print i "\t" role[i] "\t" name[i]}}' awk.txt
解释:在01前提下判断,如果为0则是manager,1则是work,存入role中,遍历时候打印出即可。
结果:

vivi	worker	2800
Tom		manager	2500
John	worker	4500

实现脚本实现,vi awk.sh创建脚本文件,将上诉语句拷贝进入,按照java格式排版即可。
在这里插入图片描述
使用命令awk -f awk.sh awk.txt即可得到数据;
解释:-f是awk命令要求的读取脚本需要的,awk.txt是需要执行的文本。

4.用户与权限

用户与权限 含义
useradd 创建新用户
passwd 设置/修改用户密码
chown 改变属主与属组
chmod 给相关组中的成员添加相关的权限
rwx 读read写write执行execute
id 打印真实且有效的用户和组id
usermod 修改用户的账户
chmod augo 其中augo表示all,user,group,others

具体实例:

useradd test01  // 创建01角色
useradd test02  // 创建02角色
passwd  test01  // 修改密码
mkdir share     // 创建share文件夹
groupadd share  // 将share添加进组
usermod -G share sxt03  // 将test01放入到share组
chown root:share /share // 改变share的属组为share
chmod g+w share         // 给share属组添加写的权限
chmod o-x share         // 给share目录其他拥有用户执行权限关闭
---------------------------------------------------------
权限的修改可以使用数字
rwx             // r代表4,w代表2,x代表1,赋予所有权限则777

5.小结

这里主要学习linux的vi编辑器的一些常用的命令,对于自己以后的操作会更加的有效率一些,正则表达式主要是为了文本分析,在vi中获取到我们想要的数据,使用sed命令或者aux命令来获取到我们想要的那些数据以及aux报表,对于linux的用户与权限的添加与删除,组的添加与删除,相关文件的访问权限等等。大数据之路漫长,加油~~

发布了74 篇原创文章 · 获赞 12 · 访问量 8224

猜你喜欢

转载自blog.csdn.net/cao1315020626/article/details/100046179
今日推荐