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]
31[0-9][0-9]
32[0-4][0-9]
325[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的用户与权限的添加与删除,组的添加与删除,相关文件的访问权限等等。大数据之路漫长,加油~~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值