day20

1.vim编辑器的操作

1. cat /etc/passwd下的内容
其中第一行的第一个单词代表用户名。x代表密码占位符。后面给的俩个数字一个是uid,一个是gid。root代表描述信息,后面的/root代表用户的家目录。最后的/bin/bash用户登录成功之后第一个运行的程序。
所以第一列全是用户名,第二列密码占位符,第三列---等等
-rwxr-xr-x: - 代表文本文件。rwx:属主. r-x:属组 r-x:其他人

2. man 某个命令 # man手册,可以查看关于某个命令的帮助
输入/某某 # 会把某某高量显示,按n会查看关于某某的下一个。也就是说把关于某某的东西放在最上面让你容易看。
stat /某某 # 可以查看文件的状态信息。其中最近
访问时间:atime,查看内容,用cat检测,只要看过。访问时间就会变
修改时间:mtime,修改内容。只要内容被修改,修改时间就会变化
改变时间:ctime,修改内容,修改权限等属性,凡是有改动这个改变时间就会变化
命令行模式下的输入
u # 撤回到上一步的操作,ctrl + r # 跟u相反
0是快速移动到行首。shift+4移动到末尾
shift+0移动到末尾 gg移动到最后一行的开头
GG移动到第一行的开头 M屏幕的中央开头
数字+G直接移动到x行的开头
/某某 调到关于某某的行
可视快-ctrl + v.左右上下移动选择进去的区域,按d将选中的区域会删除。
首先按ctrl+v进入可视快模式,然后光标移动到你想选择注释掉的地方,然后按i,输入#。之后连续俩次esc。就完成了对每行开头加注释
一定要注意切换到英文模式也就是别让他进入打字模式

末行模式下
命令行中的替换。如果写个百分号代表所有行都包含在内。s代表替换。三个/。第一个/写原型。第二个/后面写替换后的结果
% s/egon/EGON/ # 在%的前提下,只换每行的第一个egon,也就是说第一行有2个egon,置换第一行的一个,第一行的第二个不变,还是egon
但是带g就代表所有的都换
% s/egon/EGON/g # 在%的前提下,g代表所有的egon都会换掉。
2,5 s/egon/EGON/ # 没有百分号换成了2,5代表第二行到第五行。
2,$ s/egon/EGON/ # 代表第二行到末尾。$代表末尾
% s/^#//g # ^上尖号代表以某某开头,也就是说指定了开头替换成什么都不写。相当于把所有行的注释都解除。

vim -O /a文件 /b文件 # 可以同时把俩个文件都打开
输入a编辑的是a文件,输入ctrl+ww编辑的是第二个文件

2.2.文件处理三剑客

1.sed(流逝编辑器)
以非交互的环境编辑文件
从硬盘---读--sed的内存空间-经过sed的规则修改文件--输出到屏幕上
sed -r(支持一些扩展的正则表达式) "处理规则(定位+命令)" 某个文件绝对路径
不写定位,意思默认定位所有,也就是文件内的所有行
不写命令,意思就是没有命令,正常输出
sed -r "2p" /home/a.txt # 代表没有定位默认所有行,2p,2代表第二行,p代表打印,也就是复制的意思
sed -r "2d" /home/a.txt # d代表删除。
sed -r "1c xxx" /home/a.txt # c代表改变(change).比如以前第一行是111改成xxx得到的是xxx
sed -r "1s/1/6/g" /home/a.txt # s代表替换,把第一行中的1替换成6,如果不写g默认换的是第一行的第一个1
行范围定位
sed -r "3,5d(d可以换成p,c,s///g)" /home/a.txt # 第三行到第五行
打印,删除,改变,替换等
sed -r "3,$d(p,c,s///g)" /home/a.txt # 第三行到最后一行。
打印,删除,改变,替换等
sed -r "3d;5d(p,c,s///g)" /home/a.txt # 第三行和第五行。
打印,删除,改变,替换等
正则定位
在正则定位中一定要注意在/egon/只是单纯的包含某个定位时候需要(d,p,c,s///g)时候。原文件要么包含新结果,要么跟新结果一样。不然(d,p,c,s///g)不成功。也就是说命令失效。等于无命令只有正则定位
sed -r "/^egon/d(p,c,s///g)" /home/a.txt # 以egon开头的行
打印,删除,改变,替换等
sed -r "/egon$/d(p,c,s///g)" /home/a.txt # 以egon结尾的行
打印,删除,改变,替换等
sed -r "/egon/d(p,c,s///g)" /home/a.txt # 包含egon的行
打印,删除,改变,替换等
sed -r "/egon/s/egon/EGON/g" /home/a.txt # 包含egon的行,把所有的egon都替换成EGON
以上只是帮你在屏幕上打印出来,无论是删除还是打印等,他的原文件没有做任何的修改,也就是说只是修改并没有保存到硬盘内。所以如果想让原文件保存到硬盘需要加一个i
sed -ri "/egon$/d(p,c,s///g)" /home/a.txt # 这个时候的i代表修改的内容保存到硬盘里面。
sed -r "s/egon/XXXXX/gi" /home/a.txt # 这时候的i代表忽略大小写。也就是说如果某行中有EGOG,也会把EGON换成XXXXX
2.grep(过滤文件)
正则表达式
grep "egon" /home # 筛选包含egon的所以行
grep "^egon" /home # 筛选以egon开头的所有行
grep "egon$" /home # 筛选以egon结尾的所有行

grep -n "egon" /home # 把筛选后包含egon行的行号显示出来
比如说(10 yanglong egon 213213d ddd asd)
grep -i "egon" /home # # 筛选的时候把EGON,egon都显示出来,也就是忽略大小写。
grep -rl "egon" / # 筛选/下的所有子文件,所有子文件的子子文件,以及子子子.....文件包含root的无论是哪一行的文件的绝对路径显示出来,方便我们寻找。这个方法用处极大,重要指数六颗星
ps aux # 查看系统当前运行系统的所有进程
ps aux | grep bash # 把ps aux的结果扔进管道里,grep过滤掉ps aux的结果,只找包含bash的进程。kill -9 PID 强制杀掉进程

3.awk
awk的运行原理:把文件内容读到内存之后按照某一个固定分隔符切割成几部分。awk是对文件做的一个格式化输出.
一个非常重要的点:一定要用单引号,双引号是错误的
awk -F: 'NR>=1 && NR<=3{print $1,$3}' /home # -F:代表原文件的分隔符。
NR>=1 && NR<=3 代表指定行。第一行到第三行。如果是所有行。就不用写。不写就是默认所有行。awk -F: '{print $1,$3}' /home
NR<=3 || NR>=8 代表指定行。并集。小于等于3的行和大于等于8的行
{}里面代表的是命令。print代表打印。$1代表第一列。逗号可以为任意符号,主要是为了区分几列。如果不写逗号相当于第一列和第三列靠在一起。写了逗号就相当于第一列和第三列中间有空格
F:指定的行分隔符,如果原文件是冒号就写-F: 如果是其他符号就写其他。但是必须保证每行的分隔符必须一致,不然不能使用awk。这是因为awk只对有规律的文件做处理。
awk -F: 'NR>=1 && NR<=3{print NR,$1,$3,NF}' /home
NR代表行号。
NF代表每一行,以冒号分隔符,分成了几列的个数。
$NF也就是说最后一列。$(NF-1)倒数第二列
awk -F: '/^egon/{print $1,$3}' /home # 以egon开头的行。打印第一列和第三列的结果
awk -F: '/egon/{print $1,$3}' /home # 包含egon的行。打印第一列和第三列的结果
awk -F: '/egon$/{print $1,$3}' /home # 以egon结尾的行。打印第一列和第三列的结果
1
grep的正则表达式里面没有//。而awk和sed里面都有
文件处理的三种方法
sed处理方法。首先sed是非交互处理文件
他的表达式是sed -r "定位+命令" 文件绝对路径 如果-r后面加i代表把处理过的数据写进硬盘里面。
其中定位有范围行定位和正则地位
命令有pcsd。p代表打印,把硬盘里面该文件的所有数据输入到sed内存中,其中定位的那行打印输出到屏幕上,其他的正常输出到屏幕上。
c代表改变也就是覆盖的意思。
s代表替换的意思。把某行的某个元素或者该行全部替换,不加g代表只换该行的第一个。
d代表删除
范围定位说的是某行到某行进行打印删除替换覆盖。
而正则的意思就是以某个元素开头的所有行,或者包含某个元素的所有行,或者以某个元素结尾的所有行进行替换删除覆盖打印。
其中^号代表以某某开头,$符号代表以某某结尾,这跟awk里面的$符号不一样awk的$代表某某列的意思。

awk处理方法是通过把文件内容读到内存之后按照某一个固定的分隔符分割成几部分,awk是对文件做的一个格式化输出,方便我们清晰查看我们所需要的数据。awk也有范围和正则定位之分。
awk的表达式是awk -F: '定位+{print $第几列,$第几列}' /etc/passwd
我们需要注意的是awk的表达式所用的冒号跟别人有很大的区别,awk只能用单引号来包含,但是sed却单双引号都可以。这里需要特别注意一下。其中-F:代表以冒号为分割符分割每列,你可以用其他分割符,但是要强调的是文件里面所有分割符必须全部一样,不然分割个毛线。
其中范围定位我们主要用某行到某行用NR表示,如果是交集就用两个&符号表示,如果是并集用2个管道符号来表示。如果什么都不写默认所有行
而正则定位跟sed一样都是以某某开头,以某某结尾,包含某某的行。
接着就来说命令里面的东西,他有一个固定是花括号里面写print和某某列到某某列,用$符号代表某某列,而NF跟$组合可以理解成某某行的最后一列。
最后就是grep处理方法
他的固定表达式是grep "" /etc/passwd
他表示的是过滤以某某开头以某某结尾包含某某的所有行
其中一个特别需要注意的是grep -rl "" /home
表示的是浏览/下面的子文件,子文件里面的子子文件说白了就是浏览/里面的所有文件,将包含某某的所有文件绝对路径罗列出来。

posted @ 2021-06-27 13:12  点滴180  阅读(46)  评论(0编辑  收藏  举报