linux-tutorial/docs/linux/Linux文件编辑命令.md

163 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Linux 文件编辑命令
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC depthFrom:2 depthTo:2 -->
- [流编辑器 - sed](#流编辑器---sed)
- [文本编辑器 - vi](#文本编辑器---vi)
<!-- /TOC -->
# Linux 文件编辑命令
## 流编辑器 - sed
> sed 是一种流编辑器它是文本处理工具能够完美的配合正则表达式使用功能不同凡响。处理时把当前处理的行存储在临时缓冲区中称为“模式空间”pattern space接着用 sed 命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕。接着处理下一行这样不断重复直到文件末尾。文件内容并没有改变除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
>
> 参考http://man.linuxde.net/sed
示例:
```sh
# 替换文本中的字符串
sed 's/book/books/' file
# -n 选项 和 p 命令 一起使用表示只打印那些发生替换的行
sed -n 's/test/TEST/p' file
# 直接编辑文件选项 -i ,会匹配 file 文件中每一行的第一个 book 替换为 books
sed -i 's/book/books/g' file
# 使用后缀 /g 标记会替换每一行中的所有匹配
sed 's/book/books/g' file
# 删除空白行
sed '/^$/d' file
# 删除文件的第2行
sed '2d' file
# 删除文件的第2行到末尾所有行
sed '2,$d' file
# 删除文件最后一行
sed '$d' file
# 删除文件中所有开头是test的行
sed '/^test/'d file
```
## 文本编辑器 - vi
> vi 命令是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim它是 vi 的增强版vi Improved与 vi 编辑器完全兼容,而且实现了很多增强功能。
>
> 参考http://man.linuxde.net/vi
### 补充说明
**vi 命令** 是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim它是 vi 的增强版vi Improved与 vi 编辑器完全兼容,而且实现了很多增强功能。
vi 编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用 vi 编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开 vi 编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。
vi 编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下:
```
Ctrl+u向文件首翻半屏
Ctrl+d向文件尾翻半屏
Ctrl+f向文件尾翻一屏
Ctrl+b向文件首翻一屏
Esc从编辑模式切换到命令模式
ZZ命令模式下保存当前文件所做的修改后退出 vi
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x 或 X删除一个字符x 删除光标后的,而 X 删除光标前的;
D删除从当前光标到光标所在行尾的全部字符
dd删除光标行正行内容
ndd删除当前行及其后 n-1 行;
nyy将当前行及其下 n 行的内容保存到寄存器其中为一个字母n 为一个数字;
p粘贴文本操作用于将缓存区的内容粘贴到当前光标所在位置的下方
P粘贴文本操作用于将缓存区的内容粘贴到当前光标所在位置的上方
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
name文本查找操作用于从当前光标所在位置开始向文件头部查找指定字符串的内容查找的字符串会被加亮显示
abs/F/T替换文本操作用于在第 a 行到第 b 行之间,将 F 字符串换成 T 字符串。其中“s/”表示进行替换操作;
a在当前字符后添加文本
A在行末添加文本
i在当前字符前插入文本
I在行首插入文本
o在当前行后面插入一空行
O在当前行前面插入一空行
:wq在命令模式下执行存盘退出操作
:w在命令模式下执行存盘操作
:w在命令模式下执行强制存盘操作
:q在命令模式下执行退出 vi 操作;
:q在命令模式下执行强制退出 vi 操作;
:e 文件名:在命令模式下,打开并编辑指定名称的文件;
:n在命令模式下如果同时打开多个文件则继续编辑下一个文件
:f在命令模式下用于显示当前的文件名、光标所在行的行号以及显示比例
:set number在命令模式下用于在最左端显示行号
:set nonumber在命令模式下用于在最左端不显示行号
```
### 语法
```
vi(选项)(参数)
```
### 选项
```
+<行号>:从指定行号的行开始先是文本内容;
-b以二进制模式打开文件用于编辑二进制文件和可执行文件
-c<指令>:在完成对第一个文件编辑任务后,执行给出的指令;
-d以 diff 模式打开文件,当多个文件编辑时,显示文件差异部分;
-l使用 lisp 模式打开“lisp”和“showmatch”
-m取消写文件功能重设“write”选项
-M关闭修改功能
-n不实用缓存功能
-o<文件数目>:指定同时打开指定数目的文件;
-R以只读方式打开文件
-s安静模式不现实指令的任何错误信息。
```
### 参数
文件列表:指定要编辑的文件列表。多个文件之间使用空格分隔开。
### 知识扩展
vi 编辑器有三种工作方式:命令方式、输入方式和 ex 转义方式。通过相应的命令或操作,在这三种工作方式之间可以进行转换。
**命令方式**
在 Shell 提示符后输入命令 vi进入 vi 编辑器,并处于 vi 的命令方式。此时从键盘上输入的任何字符都被作为编辑命令来解释例如a(append表示附加命令i(insert表示插入命令x 表示删除字符命令等。如果输入的字符不是 vi 的合法命令,则机器发出“报警声”,光标不移动。另外,在命令方式下输入的字符(即 vi 命令)并不在屏幕上显示出来,例如,输入 i屏幕上并无变化但通过执行 i 命令,编辑器的工作方式却发生变化:由命令方式变为输入方式。
**输入方式**
通过输入 vi 的插入命令i、附加命令a、打开命令o、替换命令s、修改命令(c或取代命令r可以从命令方式进入输入方式。在输入方式下从键盘上输入的所有字符都被插入到正在编辑的缓冲区中被当做该文件的正文。进入输入方式后输入的可见字符都在屏幕上显示出来而编辑命令不再起作用仅作为普通字母出现。例如在命令方式下输入字母 i进到输入方式然后再输入 i就在屏幕上相应光标处添加一个字母 i。
由输入方式回到命令方式的办法是按下 Esc 键。如果已在命令方式下,那么按下 Esc 键就会发出“嘟嘟”声。为了确保用户想执行的 vi 命令是在命令方式下输入的,不妨多按几下 Esc 键,听到嘟声后再输入命令。
**ex 转义方式**
vi 和 ex 编辑器的功能是相同的,二者的主要区别是用户界面。在 vi 中,命令通常是单个字母,如 a,x,r 等。而在 ex 中,命令是以 Enter键结束的命令行。vi 有一个专门的“转义”命令,可访问很多面向行的 ex 命令。为使用 ex 转义方式,可输入一个冒号(:)。作为 ex 命令提示符,冒号出现在状态行(通常在屏幕最下一行)。按下中断键(通常是 Del 键),可终止正在执行的命令。多数文件管理命令都是在 ex 转义方式下执行的(例如,读取文件,把编辑缓冲区的内容写到文件中等)。转义命令执行后,自动回到命令方式。例如:
```
:1,$s/I/i/g 按 Enter 键
```
则从文件第一行至文件末尾($)将大写 I 全部替换成小写 i。vi 编辑器的三种工作方式之间的转换如图所示。
![vi.jpg](http://man.linuxde.net/wp-content/uploads/2013/11/vi.jpg)
```
```