文件内容查看编辑
- [一、Linux 文件内容查看编辑要点](#一、Linux 文件内容查看编辑要点)
- 二、命令常见用法
一、Linux 文件内容查看编辑要点
- 连接文件并打印到标准输出设备 - 使用
cat
- 显示指定文件的开头若干行 - 使用
head
- 显示指定文件的末尾若干行,常用于实时打印日志文件内容 - 使用
tail
- 显示文件内容,每次显示一屏 - 使用
more
- 显示文件内容,每次显示一屏 - 使用
less
- 自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等 - 使用
sed
- 文本编辑器 - 使用
vi
或vim
- 使用正则表达式搜索文本,并把匹配的行打印出来 - 使用
grep
二、命令常见用法
2.1、cat
cat 命令用于连接文件并打印到标准输出设备上。
sh
cat m1 # 在屏幕上显示文件 ml 的内容
cat m1 m2 # 同时显示文件 ml 和 m2 的内容
cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中
2.2、head
head 命令用于显示文件的开头内容。在默认情况下,head 命令显示文件的头部 10 行内容。
sh
head [OPTION]... [FILE]...
-n
或--lines=[-]K
:指定输出文件的行数。例如,head -n 5 FILE会显示文件的前5行内容。如果数字前有"-"符号,则显示除了最后N行以外的所有内容。-c
或--bytes=[-]K
:指定输出文件的字节数。例如,head -c 50 FILE会显示文件的前50个字节内容。如果数字前有"-"符号,则显示除了最后N个字节以外的所有内容。-q
或--quiet
:静默模式,不输出文件名头信息。通常在处理多个文件时使用。-v
或--verbose
:总是输出文件名的头信息。
sh
# 显示文件的前5行
head -n 5 test.txt
# 显示文件的前50个字节
head -c 50 test.txt
# 显示文件除了最后3行以外的所有内容
head -n -3 test.txt
2.3、tail
tail 命令用于显示文件的尾部内容。在默认情况下,tail 命令显示文件的尾部 10 行内容。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为"-",则读取标准输入。
sh
tail [选项] [文件]
-n
或--lines=[+]K
:显示文件的最后 K 行内容。如果 K 前面加上+,则从第 K 行开始显示。例如,tail -n 5 filename 显示文件的最后 5 行-c
或--bytes=[+]K
:显示文件的最后 K 个字节。如果 K 前面加上+,则从第 K 个字节开始显示。例如,tail -c 100 filename 显示文件的最后 100 个字节-f
或--follow
:实时显示文件的新添加内容,常用于监控日志文件。例如,tail -f filename 会实时显示文件的新增内容-F
:类似于 -f,但在文件被重命名或删除后会继续跟踪新的文件-q
或--quiet
或--silent
:不显示文件名(当处理多个文件时)-v
或--verbose
:始终显示文件名(即使只处理一个文件)--pid=PID
:与 -f 选项一起使用,当指定的进程 ID (PID) 结束时,tail命令也会停止-s
或--sleep-interval=S
:与 -f 选项一起使用,指定每次检查文件变化的间隔时间(秒)
sh
# 显示文件的最后10行
tail filename
# 显示文件的最后5行
tail filename -n 5
# 实时监控文件内容
tail -f filename
# 不显示文件名
tail -q file1 file2
# 始终显示文件名
tail -v filename
# 从第5行开始显示
tail -n +5 filename
# 显示文件的最后10个字符
tail -c 10 file
2.4、more
more 命令是一个基于 vi 编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持 vi 中的关键字定位操作。more 名单中内置了若干快捷键,常用的有 H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列不同的方法对提示做出回答:
- 按
Space 键
:显示文本的下一屏内容。 - 按
Enier 键
:只显示文本的下一行内容。 - 按斜线符
|
:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。 - 按
H 键
:显示帮助屏,该屏上有相关的帮助信息。 - 按
B 键
:显示上一屏内容。 - 按
Q 键
:退出 rnore 命令。
sh
more [选项] [文件名]
-d
:显示底行,并显示翻页符。-i
:忽略底行,不显示翻页符。-s
:连续显示相同行。-u
:只显示上行。-l
:限制每行显示的字符数。-p
:不显示空白行。-f
:显示文件大小信息。-H
:在终端中显示完整的文件路径。-n
:设置行号。-r
:将制表符转换为空格。-N
:设置缓冲区的大小。-b
:使用缓冲区大小为指定值。-s
:在每个缓冲区之间添加一个空行。-t
:在每个缓冲区之间添加一个时间戳。-u
:在每个缓冲区之间添加一个用户标识符。-v
:在每个缓冲区之间添加一个版本信息。-w
:在每个缓冲区之间添加一个窗口大小信息。-z
:在每个缓冲区之间添加一个压缩信息。
sh
# 显示文件 file 的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
more -dc file
# 显示文件 file 的内容,每 10 行显示一次,而且在显示之前先清屏。
more -c -10 file
# 分页显示文件内容
more file.txt
# 在终端中显示行号
more -n 1 file.txt
# 显示文件开头或结尾内容
more +10 file.txt
more -10 file.txt
# 显示非打印字符
more -v file.txt
# 显示行尾的换行符
more -d file.txt
# 将多个文件合并为一个文件
more file1.txt file2.txt > mergedfile.txt
# 将多个文件的内容按顺序追加到一个新文件中
more file1.txt >> mergedfile.txt
more file2.txt >> mergedfile.txt
# 使用 more 命令进行搜索
more +/string file.txt
# 将 more 命令与其他命令结合使用
ls -l | more
# 在 more 命令中指定缓冲区大小
more --lines=20 file.txt
2.5、less
less 命令的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 命令允许用户向前或向后浏览文件,而 more 命令只能向前浏览。用 less 命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键。
- 查看文件内容:在终端中输入 less 文件名 可以分页查看文件内容。使用方向键↑和↓可以上下滚动,Page Up和Page Down键可以翻页。
- 搜索文本:输入 / 后接搜索词可以向下搜索,输入 ? 后接搜索词可以向上搜索。按 n 键可以查找下一个匹配项,按 N 键可以查找上一个匹配项。
- 退出:按 q 键可以退出 less 命令。
sh
less [选项] [文件]
-N
:显示行号,方便查看和定位文本内容。-S
:当文本行过长时,将超出屏幕宽度的部分横向滚动显示,避免文本换行影响查看。-m
:显示文件的百分比位置,以及当前显示的行范围,便于了解查看进度。-i
:忽略搜索时的大小写。-G
:清除高亮搜索匹配后的结果。-e
:当到达文件尾后自动退出文件。-r
:显示原始字符,包括控制字符。-s
:将连续的多个空行显示为一行。--help
:显示帮助信息。--version
:显示版本信息
less命令使用文档:
sh
下面是LESS命令的摘要:
标有 * 的命令可能前面会有一个数字N。
括号内的注释表示如果给出N,行为将如何改变。
前面有插入符号的键表示Ctrl键;因此^K表示ctrl-K。
h H 显示这个帮助。
q :q Q :Q ZZ 退出。
---------------------------------------------------------------------------
移动
e ^E j ^N CR * 向前移动一行(或N行)。
y ^Y k ^K ^P * 向后移动一行(或N行)。
f ^F ^V SPACE * 向前移动一个窗口(或N行)。
b ^B ESC-v * 向后移动一个窗口(或N行)。
z * 向前移动一个窗口(并将窗口设定为N)。
w * 向后移动一个窗口(并将窗口设定为N)。
ESC-SPACE * 向前移动一个窗口,但不停在文件结束处。
d ^D * 向前移动半个窗口(并将半窗口设定为N)。
u ^U * 向后移动半个窗口(并将半窗口设定为N)。
ESC-) RightArrow * 右移半个屏幕宽度(或N个位置)。
ESC-( LeftArrow * 左移半个屏幕宽度(或N个位置)。
ESC-} ^RightArrow 移到最后一列显示。
ESC-{ ^LeftArrow 移到第一列。
F 向前永远;类似于 "tail -f"。
ESC-F 类似于F,但在找到搜索模式时停止。
r ^R ^L 重绘屏幕。
R 重绘屏幕,丢弃缓冲输入。
---------------------------------------------------
默认的"窗口"是屏幕高度。
默认的"半窗口"是屏幕高度的一半。
---------------------------------------------------------------------------
搜索
/pattern * 向前搜索(N-th)匹配行。
?pattern * 向后搜索(N-th)匹配行。
n * 重复上次搜索(N-th出现)。
N * 反向重复上次搜索。
ESC-n * 重复上次搜索,跨文件。
ESC-N * 反向重复上次搜索,跨文件。
ESC-u 撤销(切换)搜索高亮。
&pattern * 仅显示匹配行
---------------------------------------------------
搜索模式可能以一个或多个以下符号开始:
^N 或 ! 搜索不匹配的行。
^E 或 * 搜索多个文件(通过文件结束)。
^F 或 @ 在第一个文件(对于/)或最后一个文件(对于?)开始搜索。
^K 高亮匹配,但不移动(保持位置)。
^R 不使用正则表达式。
---------------------------------------------------------------------------
跳转
g < ESC-< * 跳转到文件的第一行(或第N行)。
G > ESC-> * 跳转到文件的最后一行(或第N行)。
p % * 跳转到文件的开头(或文件的N%位置)。
t * 跳转到下一个(第N个)标签。
T * 跳转到上一个(第N个)标签。
{ ( [ * 查找关闭的括号 } ) ]。
} ) ] * 查找打开的括号 { ( [。
ESC-^F <c1> <c2> * 查找关闭的括号 <c2>。
ESC-^B <c1> <c2> * 查找打开的括号 <c1>
---------------------------------------------------
每一个"查找关闭括号"命令都会向前找到与顶行中的(第N个)打开括号匹配的关闭括号。
每一个"查找打开括号"命令都会向后找到与底行中的(第N个)关闭括号匹配的打开括号。
m<字母> 使用<字母>标记当前的顶行。
M<字母> 使用<字母>标记当前的底行。
'<字母> 跳转到之前标记的位置。
'' 跳转到上一个位置。
^X^X 同 '。
ESC-M<字母> 清除一个标记。
---------------------------------------------------
标记可以是任何大写或小写的字母。
有些标记是预定义的:
^ 代表 文件的开头
$ 代表 文件的结尾
---------------------------------------------------------------------------
切换文件
:e [file] 检查一个新文件。
^X^V 同 :e。
:n * 检查命令行中的下一个(第N个)文件。
:p * 检查命令行中的上一个(第N个)文件。
:x * 检查命令行中的第一个(或第N个)文件。
:d 从命令行列表中删除当前文件。
= ^G :f 打印当前文件名。
---------------------------------------------------------------------------
其他命令
-<标志> 切换命令行选项[见下面的OPTIONS]。
--<名称> 通过名称切换命令行选项。
_<标志> 显示命令行选项的设置。
__<名称> 通过名称显示选项的设置。
+cmd 每次检查新文件时执行less cmd。
!command 使用$SHELL执行shell命令。
|Xcommand 将当前位置和标记X之间的文件通过管道传输给shell命令。
s file 将输入保存到一个文件。
v 使用$VISUAL或$EDITOR编辑当前文件。
V 打印"less"的版本号。
---------------------------------------------------------------------------
选项
大多数选项可以在命令行上更改,
或者在less中使用-或--命令来更改。
选项可以有两种形式:一个是前面带有-的单个字符,
另一个是前面带有--的名称。
-? ........ --help
显示帮助(来自命令行)。
-a ........ --search-skip-screen
搜索跳过当前屏幕。
-A ........ --SEARCH-SKIP-SCREEN
搜索开始于目标行之后。
-b [N] .... --buffers=[N]
缓冲区数量。
-B ........ --auto-buffers
不为管道自动分配缓冲区。
-c ........ --clear-screen
通过清除而不是滚动来重绘。
-d ........ --dumb
哑终端。
-D [xn.n] . --color=xn.n
设置屏幕颜色。(仅限MS-DOS)
-e -E .... --quit-at-eof --QUIT-AT-EOF
在文件结束时退出。
-f ........ --force
强制打开非常规文件。
-F ........ --quit-if-one-screen
如果整个文件适合在第一屏显示,则退出。
-g ........ --hilite-search
仅高亮显示搜索的最后一个匹配。
-G ........ --HILITE-SEARCH
不高亮显示任何搜索匹配。
-h [N] .... --max-back-scroll=[N]
向后滚动限制。
-i ........ --ignore-case
在搜索中忽略大小写,前提是搜索不包含大写字母。
-I ........ --IGNORE-CASE
在所有搜索中忽略大小写。
-j [N] .... --jump-target=[N]
目标行的屏幕位置。
-J ........ --status-column
在屏幕左边缘显示状态列。
-k [file] . --lesskey-file=[file]
使用lesskey文件。
-K ........ --quit-on-intr
响应ctrl-C退出less。
-L ........ --no-lessopen
忽略LESSOPEN环境变量。
-m -M .... --long-prompt --LONG-PROMPT
设置提示样式。
-n -N .... --line-numbers --LINE-NUMBERS
不使用行号。
-o [file] . --log-file=[file]
复制到日志文件(仅限标准输入)。
-O [file] . --LOG-FILE=[file]
复制到日志文件(无条件覆盖)。
-p [pattern] --pattern=[pattern]
从命令行开始于模式。
-P [prompt] --prompt=[prompt]
定义新提示。
-q -Q .... --quiet --QUIET --silent --SILENT
静音终端铃声。
-r -R .... --raw-control-chars --RAW-CONTROL-CHARS
输出"原始"控制字符。
-s ........ --squeeze-blank-lines
压缩多个空白行。
-S ........ --chop-long-lines
切除(截断)长行而不是包裹。
-t [tag] .. --tag=[tag]
查找标签。
-T [tagsfile] --tag-file=[tagsfile]
使用备用的标签文件。
-u -U .... --underline-special --UNDERLINE-SPECIAL
更改处理退格符的方式。
-V ........ --version
显示"less"的版本号。
-w ........ --hilite-unread
在前向屏幕后高亮显示第一条新行。
-W ........ --HILITE-UNREAD
在任何前向移动后高亮显示第一条新行。
-x [N[,...]] --tabs=[N[,...]]
设置制表符停止位。
-X ........ --no-init
不使用termcap初始化/反初始化字符串。
-y [N] .... --max-forw-scroll=[N]
前向滚动限制。
-z [N] .... --window=[N]
设置窗口大小。
-" [c[c]] . --quotes=[c[c]]
设置shell引号字符。
-~ ........ --tilde
不显示文件结束后的波浪号。
-# [N] .... --shift=[N]
水平滚动量(0 = 半个屏幕宽度)
--follow-name
如果输入文件被重命名,F命令更改文件。
--mouse
启用鼠标输入。
--no-keypad
不发送termcap键盘初始化/反初始化字符串。
--no-histdups
从命令历史中删除重复项。
--rscroll=C
设置用于标记截断行的字符。
--save-marks
在less的调用中保留标记。
--use-backslash
后续选项使用反斜杠作为转义字符。
--wheel-lines=N
鼠标滚轮每点击一次移动N行。
---------------------------------------------------------------------------
行编辑
这些键可以用来编辑在屏幕底部"命令行"上输入的文本。
右箭头 ..................... ESC-l ... 光标向右移动一个字符。
左箭头 ...................... ESC-h ... 光标向左移动一个字符。
ctrl-右箭头 ESC-右箭头 ESC-w ... 光标向右移动一个单词。
ctrl-左箭头 ESC-左箭头 ESC-b ... 光标向左移动一个单词。
HOME ........................... ESC-0 ... 光标移动到行首。
END ............................ ESC-$ ... 光标移动到行尾。
BACKSPACE ................................ 删除光标左边的字符。
DELETE ......................... ESC-x ... 删除光标下的字符。
ctrl-BACKSPACE ESC-BACKSPACE ........... 删除光标左边的单词。
ctrl-DELETE .... ESC-DELETE .... ESC-X ... 删除光标下的单词。
ctrl-U ......... ESC (仅MS-DOS) ....... 删除整行。
上箭头 ........................ ESC-k ... 检索上一条命令行。
下箭头 ...................... ESC-j ... 检索下一条命令行。
TAB ...................................... 完成文件名并循环。
SHIFT-TAB ...................... ESC-TAB 完成文件名并反向循环。
ctrl-L ................................... 完成文件名,列出全部。
2.6、sed
sed 是一种流编辑器,它是文本处理工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。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
2.7、vi
vi 命令是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim,它是 vi 的增强版(vi Improved),与 vi 编辑器完全兼容,而且实现了很多增强功能。
sh
vi filename
2.8、grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
sh
# 在多级目录中对文本递归搜索(程序员搜代码的最爱):
$ grep "class" . -R -n
# 忽略匹配样式中的字符大小写
$ echo "hello world" | grep -i "HELLO"
# 匹配多个模式:
$ grep -e "class" -e "vitural" file
# 只在目录中所有的.php和.html文件中递归搜索字符"main()"
$ grep "main()" . -r --include *.{php,html}
# 在搜索结果中排除所有README文件
$ grep "main()" . -r --exclude "README"
# 在搜索结果中排除filelist文件列表里的文件
$ grep "main()" . -r --exclude-from filelist