linux文件管理及编辑

linux文件管理及编辑

一、文件管理

1 文件管理之:查看文件内容(cat tac less more head tail tailf grep …)

#------cat

# cp /etc/passwd ./pass

# cat pass #正常查看文件方式

# cat -n pass #-n显示文件有多少行

# cat -A pass #查看文件的特殊符号,比如文件中存在tab键

# tac pass #倒序查看文件

cat >> test2.txt <

ads

adf

EOF

#------less、more

# less /etc/services #使用光标上下翻动,空格进行翻页,q退出

# more /etc/services #使用回车上下翻动,空格进行翻页,q退出(有百分比)

#------head

# head pass #查看头部内容,默认前十行

# head -n5 pass #查看头部5行,使用-n指定

# ps aux | head -5 # 只看头部5个进程

#------tail

# tail pass # 查看文件尾部,默认10行

# tail -20 /var/log/secure # 查看文件尾部20行

# tail -f /var/log/messages #-f动态查看文件尾部的变化

# tailf /var/log/messages #查看文件尾部的变化

# ps aux | tail -2

#------grep过滤文件内容

# grep "^root" pass #匹配以root开头的行

# grep "bash$" pass #匹配以bash结尾的行

# grep -i "ftp" pass #忽略大小写匹配

# grep -Ei "sync$|ftp" pass #匹配文件中包含sync结尾或ftp字符串

# grep -n -A 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的下2行

# grep -n -B 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上2行

# grep -n -C 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上下2行

# 上翻,下翻

control+b:下翻

control+f:上翻

cat 显示文本

-E 显示结尾的$符

-n 对显示的每一行进行编号

-b 对非空行进行编号

-s 对连续的空行进行压缩

tac 倒序显示

m[root@192 test]#cat issue

\S

Kernel \r on an \m

m[root@192 test]#tac issue

Kernel \r on an \m

\S

less 分屏显示文本

向下翻一屏 空格

向下翻一行 回车

q 退出

/ 文本 搜索文本

n 向下查找 N向上查找

less 是man命令的默认分页器

more 分页显示文件

默认情况下显示读取的百分比

读取完成自动退出

q 退出

-d 显示翻屏和退出的提示

head 显示文件的前面的内容

默认显示前10行

-# 显示前#行

head -2 passwd

-n # 显示前#行

-c # 显示前#个字符

tail 显示文件的后面的内容

默认显示后10行

-# 显示后#行

-n # 显示后#行

-c # 显示后#个字符,换行符也是一个字符

m[root@192 test]#tail -c 3 passwd

sh

2 文件管理之:字符处理命令(sort、uniq、cut、sed、awk、wc、)

cut 切割

cut OPTION... [FILE]...

-c 按照字符切割

tail passwd |cut -c2-5

-d 指定切割符,默认是tab

-f # 显示第#个字段

#,#,# 显示离散的多个

#-# 表示连续的

1-5,7 可以结合使用

# 以冒号为切割

tail passwd |cut -d: -f1-5,7

tail passwd |cut -d: -f1-5

tail passwd |cut -d: -f1,3,5

cut OPTION... [FILE]...

#选项:-d 指定分隔符 -f 数字,取第几列 –f3,6三列和6列 -c 按字符取(空格也算)

#echo "Im lqz, is QQ 306334678" >file.txt

#过滤出文件里 lqz以及306334678

#实现上述题目几种思路

# cut -d " " -f2,5 file.txt

# cut -d " " -f2,5 file.txt |sed 's#,##g'

# sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}'

# awk '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}'

# awk -F "[, ]" '{print $2,$6}' file.txt

# awk -F '[, ]+' '{print $2,$5}' file.txt

# awk 取列

awk '{print $2,$5}' file.txt

# -F 指定分隔符

awk '{print $2,$5}' file.txt | awk -F "," '{print $1,$2}'

# sed 替换 sed 's###g'

# sed 's###g' 固定写法

# sed 's#,##g' 把逗号替换成空

cut -d " " -f2,5 file.txt | sed 's#,##g'

paste 合并

默认是相同行合并到一起,默认是tab键

-d 执行间隔符

-s 将所有的行按照列来显示

paste a.txt b.txt

paste -d: a.txt b.txt

paste -s a.txt b.txt

wc 用来对文本进行统计

[root@localhost test]#wc b.txt

4 5 20 b.txt

行数 单词数 字节数 文件名

-l 只显示行数

-w 只显示单词数

-c 只显示字节数

-m 只显示字符数

-L 显示文件中最长行的长度

wc [OPTION]... [FILE]...

#选项:-l显示文件行数 -c显示文件字节 -w显示文件单词

# wc -l /etc/fstab #统计/etc/fstab文件有多少行

# wc -l /etc/services #统计/etc/services 文件行号

# ls |wc -l #统计当前路径下有多少文件和文件夹

#扩展方法

# grep -n "." /etc/services | tail -1

# awk '{print NR $0}' /etc/services | tail -1

# cat -n /etc/services | tail -1

sort 排序

在有些情况下,需要对应一个无序的文本文件进行数据的排序,这时就需要使用sort进行排序了。

Usage: sort [OPTION]... [FILE]...

or: sort [OPTION]... --files0-from=F

默认是按照字母排序

-r 倒序

-R 随机排序

-n 按照数字排序

-f 忽略大小写

-t 指定分隔符

-k # 指定按照第#个字段进行排序

sort -t: -k3 passwd

sort -nt: -k3 passwd

sort [OPTION]... [FILE]...

# -r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) -k:指定第几列, 指定几列几字符(指定1,1 3.1,3.3)

#1.首先创建一个文件,写入一写无序的内容

[root@lqz ~]# cat >> file.txt <

b:3

c:2

a:4

e:5

d:1

f:11

EOF

#2.使用sort下面对输出的内容进行排序

[root@lqz ~]# sort file.txt

a:4

b:3

c:2

d:1

e:5

f:11

#结果并不是按照数字排序,而是按字母排序。

#可以使用-t指定分隔符, 使用-k指定需要排序的列。

# -t 指定分隔符,-k指定列,按第二列排序

[root@lqz ~]# sort -t ":" -k2 file.txt

d:1

f:11 #第二行为什么是11?不应该按照顺序排列?

c:2

b:3

a:4

e:5

#按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。

#如果想要按照数字的方式进行排序, 需要使用 -n参数,按数字排序。

[root@lqz ~]# sort -t ":" -n -k2 file.txt

d:1

c:2

b:3

a:4

e:5

f:11

#测试案例,下载文件http://fj.xuliangwei.com/public/ip.txt,对该文件进行排序

[root@lqz ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt

uniq合并相同的行

如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命令解决这个问题(但是必须配合sort使用,相邻的才能去重,所以要配合sort)。

相邻

完全一样

-c 显示相同的行出现的次数

-d 只显示重复的行

-u 显示从没有重复过的行

# d文件以空格为切割,第4的一个字符排序,显示相同的行出现的次数

cut -d" " -f4 d|sort |uniq -c

uniq [OPTION]... [INPUT [OUTPUT]]

#选项:-c 计算重复的行

#1.创建一个file.txt文件:

[root@lqz ~]# cat >>file2.txt <

abc

123

abc

123

EOF

#2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起

[root@lqz ~]# cat file.txt |sort

123

123

abc

abc

#3.使用uniq去除相邻重复的行

[root@lqz ~]# cat file.txt |sort|uniq

123

abc

#4.-c参数能统计出文件中每行内容重复的次数

[root@lqz ~]# cat file.txt |sort|uniq -c

2 123

2 abc

pv page # 一天访问量

uv user # 访问用户

diff 对比文件

[root@localhost test]#echo "123" >> f

[root@localhost test]#diff d f

11a12

> 123

[root@localhost test]#echo "1234" >> d

[root@localhost test]#diff d f

12c12

< 1234

---

> 123

二、文件编辑

1.VIM基本概述

(1).什么是VIM?

vi和vim是Linux下的一个文本编辑工具。(可以理解为windows的记事本,或word文档)

(2).为什么要使用VIM?

因为Linux系统一切皆为文件,而我们工作最多的就是修改某个服务的配置(其实就是修改文件内容)。 也就是说如果没有vi/vim,我们很多工作都无法完成。

PS: vim是学习linux最重要的命令之一

(3).VI与VIM有什么区别?

vi和vim都是文本编辑器,只不过vim是vi的增强版,比vi多了语法高亮显示,其他编辑功能几乎无差,所以使用vi还是vim取决个人习惯。

(相当于windows系统下的文本编辑软件“记事本”与”notepad++”的区别)

PS:因为前期最小化安装CentOS系统,所以默认情况下没有vim命令,但可以使用yum install vim -y安装

(4).如何使用VIM编辑器?

在使用VIM之前,我们需要先介绍下VIM的三种模式: 普通模式、编辑模式、命令模式,每种模式分别支持多种不同的快捷键,要想高效率地操作文本,就必须先搞清这三种模式的操作区别以及模式之间的切换方法。

(5).打开文件

vim [option] .... file....

+# 直接定位到第#行

+/pattern 打开文件后,直接定位到第一个匹配到patter的地方

-b 以二进制方式打开文件

-d file1 file2 对比打开多个文件

-m file 只读方式打开文件

-e 直接以末行模式打开

(6) .VIM模式三种模式介绍

6.1 普通模式: 主要是控制光标移动,可对文本进行复制、粘贴、删除等工作。

使用vim filename 编辑一个文件时,一进入该文件就是普通模式了。

在这个模式下,可以进行光标移动、复制、删除、粘贴操作。

6.2 编辑模式: 主要进行文本内容编辑和修改

从普通模式进入编辑模式,只需你按一个键即可(i, I, a, A, o, O)

当进入编辑模式时,会在屏幕的最下一行会出现 “INSERT”标记

从编辑模式回到普通模式只需要按键盘左上方的 ESC 键即可。

6.3 末行模式: 主要用于保存或退出文本

在普通模式下,输入 “:” 或者 “/“ 即可进入命令模式。

在命令该模式下,可进行的操作有,显示行号、搜索、替换、保存、退出。

小结: vim编辑打开文件整体流程如下:

1.默认打开文件处于普通模式

2.从普通模式切换至编辑模式需要使用a、i、o

3.编辑模式修改完毕后需要先使用ECS返回普通模式

4.在普通模式输入”:”或”/“进入命令模式,可实现文件的保存与退出。

PS: 在vim中,无法直接从编辑模式切换到扩展命令模式。

模式

命令模式:可以光标,可以粘贴、复制文本,默认

插入模式或者编辑模式:可以修改文本

末行模式(扩展命令模式):保存、退出等等

esc 退出当前的模式

二.VIM模式使用

1 模式之间切换

命令模式- 插入模式

i 光标所在处插入

I 在当前光标所在的行的行首插入

a 光标所在位置的后面插入

A 在当前光标所在的行尾插入

o 在当前光标所在的行的下一行(新开)插入

O 在当前光标所在的行的上一行(新开一行)插入

插入模式- 命令模式

esc

命令模式 -- 末行模式

末行模式 -- 命令模式

esc esc

esc enter

2 关闭文件

末行模式

:w 保存

:q 退出

:wq 保存并退出

:q! 强制退出

:wq!强制保存退出

:x 保存并退出

命令模式

ZZ 保存退出

ZQ 不保存退出

3 扩展命令行模式

按":" 来进入

w 写入

q 退出

wq 保存并退出

q! 强制退出

x 保存并退出

r file 读入文件

w file 另存为

!command 直接执行命令

r!command 直接把命令的结果写到文件中

4 命令模式跳转

字符之间跳转

l 向右

h 向左

j 向下

k 向上

单词间跳转

w 下一次的单词的词首

e 当前词的词尾或者下一个单词的词尾

b 当前词的词首或者上一词的词首

# command 直接跳转#个单词

页面间跳转

H 页首

L 页尾

M 页中

zt 将光标所在行移动到屏幕的顶端

zb 将光标所在行移动到屏幕的底部

zz 将光标所在行移动到屏幕的中间

行首行尾之间跳转

^ 跳转到当前光标所在行的第一个非空字符

0(数字) 跳转到行首

$ 跳转到行尾

行间移动

#G 跳转到第#行 4G就是跳到4行

在命令扩展模式下,直接:# 跳转到对应的#行

G 直接到最后一行

gg 跳转到第一行

1G 跳转到第一行

段落之间跳转(空行分割为一段)

{ 上一段

} 下一段

翻屏

ctrl+f 向文件尾部翻一屏

ctrl+b 向文件首部翻一屏

ctrl+d 向文件尾部翻半屏

ctrl+u 向文件首部翻半屏

5 命令模式编辑

字符编辑

x 删除光标所在处的字符

#x 删除#个字符

xp 将光标所在处的字符和后面的字符互换位置

~ 将光标所在的位置大小写互换

J 删除当前行的换行符

替换

r 替换当前光标所在处的字符

R 进入替换模式

删除

d 删除,需要跟字符跳转结合

d$ 删除到行尾,删除当前位置

d0 删除到行首,当前位置不删除

d^ 删除到非空字符

dw 删除一个单词

de 向后删除一个单词

db 向前删除一个单词

dd 删除正行

# dd 删除#行

dG 删除到结尾

dgg 删除到开头

D 相当于d$

复制

y,也可以跟字符跳转结合

y$

y0

y^

yw

ye

yb

yy 一正行

#yy 复制#行

yG 复制到结尾

ygg 复制到开头

Y 复制整行

粘贴

p 如果是整行的话,则粘贴到当前光标所在行的下一行,否则粘贴到光标的后面

P 如果是整行的话,则粘贴到当前光标所在行的上一行,否则粘贴到光标的前面

改变,删除以后并将模式切换成插入模式

c 可以跟光标的跳转做结合

c$

c0

c^

cw

ce

cb

#command

cc 删除正行并插入

C 相当于c$

#[i|I|a|A|o|O]string esc 将string粘贴#次

搜索

/pattern 从当前光标往下搜索

?pattern 从当前光标往上搜索

n 同命令相同的方向

N 同命令相反的方向

撤销

u 撤销最近的修改

# u 撤销最近的#次修改

ctrl +r 撤销之前的撤销动作

. 重复最后一次操作

#. 最后一次操作重复执行#次

6 命令扩展模式

地址定界

:start,end

# 具体到第#行

#,# 第#行到第#行

#,+n 从第#开始,到第#+n行结束 1,+2 ==>1,3

. 表示当前光标所在的行

$ 表示最后一行

$-1 表示倒数第二行

% 表示全文

/pat1/,/pat2/ 从第一个pat1匹配到的地方,到pat2第一次匹配到的地方

#,/pat/ 从第#行开始,到第一次被pat匹配到的地方

/pat/,$ 从第一次被pat匹配到的地方到结尾

可以使用的命令

d

y

w file 重新另存为文件

r file 将文件的内容写到匹配到的下一行

6.1 查找并替换

要使用地址定界来进行查找

s 在扩展命令模式下使用为替换(替换光标出的字符)

格式: %s/要查找的内容/要替换的内容/装饰器(加了%,就是全文查找)

要查找的内容可以使用正则

替换的内容不能为正则

可以为分组:%s/(nfs.*)/#\1/

\1表示第一个分组内的内容

\2

\3

& 可以代表前面匹配到的内容

%s/sshd/#&/ 在匹配到的字符sshd前加#

装饰器

i 忽略大小写

g 表示全部替换

gc 每一次替换之前都要询问是否替换

分隔符的替换还可以使用

@

#

%s/@/etc/# etc前面的/替换成#

7 可视化

v 面向字符

V 面向行的

ctrl +v 面向块

可以结合所有的跳转键进行结合

对突出显示部分可以使用删除、复制、变更、过滤、替换、另存为等等

ctrl+v 进入可视块模式,选中需要注释的行

1.插入:按shift+i进入编辑模式,输入#,结束按ESC键

2.删除:选中内容后,按x或者d键删除

3.替换:选中需要替换的内容, 按下r键,然后输入替换后的内容

shift+v 进入可视行模式,选中整行内容

1.复制:选中行内容后按y键及可复制。

2.删除:选中行内容后按d键删除。

8 打开多个文件

vim file1 file2 file3

:next 下一个

:prev 上一个

:first 第一个

:last 最后一个

:qall 退出全部

:wall 保存全部

:wqall 保存并退出全部

:xall 保存并退出全部

9 使用多个窗口

vim -o 水平分隔

vim -O 垂直分隔

切换ctrl+w 加上上下左右箭头

退出:qall

vim -o file2 passwd a 同时打开三个文件

vim -o file1 file2 #水平分割

vim -O file1 file2 #垂直分割

#ctrl+ww 文件间切换

10 相同文件之间差异对比,通常用于对比修改前后差异

# diff #文件对比

# vimdiff #以vim方式打开两个文件对比,高亮显示不同的内容

11 单文件切割

ctrl+w,s 水平切割

ctrl+w,v 垂直切割

ctrl+w,q 取消相邻的窗口

ctrl+w,o 取消全部窗口

12 如果VIM非正常退出 (ctrl+z)挂起或强制退出终端没关闭VIM后

#假设打开filename文件被以外关闭,需要删除同文件名的.swp文件即可解决

# rm -f .filename.swp

三、vim工作特性

配置文件

全局有效:/etc/vimrc

对当前用户有效: ~/.vimrc

行号:set nu 取消 set nonu

忽略大小写(搜索) set ic 取消set noic

自动缩进(同上一行) set ai 取消set noai(python中用的多)

设置高亮显示(搜索到的内容) set hls 取消set nohls

语法高亮 syntax on 取消 syntax off

文件格式

windows格式 set fileformat=dos

unix set fileformat=unix

添加标识线: set cul 取消标识线 set nocul

获取帮助: set all

获取帮助信息:

:help

:help topic

vimtutor

相关推荐

365bet888 Win10电脑豆沙绿护眼模式的设置方法

Win10电脑豆沙绿护眼模式的设置方法

📅 06-29 👁️ 8378
365现金球网 捕蝇草的种植方法和注意事项

捕蝇草的种植方法和注意事项

📅 09-17 👁️ 2646