前言
+ ^5 h6 `; X. V4 {+ y+ d3 {7 V R
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。8 J' _4 _; j" x s o$ H/ e9 Y
全文本显示--cat# D8 P* P7 x6 Q0 ]5 c% j; z; T
0 M5 ]( j5 S2 o" `# E2 B( y
cat可能是常用的一个文本查看命令了,使用方法也很简单:) t. I; o( C5 ~' [
cat file #全文本显示在终端$ Y) H u( O3 {4 @; ?( q9 Y
cat -n file #显示全文本,并显示行号' C* p& [8 d; n
另外,cat也可用作合并文件:7 u: ^- K. D) A
cat file1 file2 >file3
$ e" g, k3 i0 T+ m9 t6 H1 Y该命令将file1 file2的内容合并写到file3中。
' B- q$ D) d N7 }倒序显示全文本--tac
( @2 @- A5 X; |0 e3 U- C
0 r- N3 `' o% r, k' ytac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
K q& U; }3 ?, I. Q' T/ Atac file5 N. j! N- O8 r& z$ a
分页显示文本--more* V- U1 W' F. K8 a
$ U3 R, y/ F$ o3 _' z# x9 O6 Tcat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
8 x( C2 s) x, \5 I& d! k1 z1.显示内容
) o6 T7 M2 a) \) c. \5 z0 s* ymore file
6 @5 z# {6 s6 i1 `" S7 g* N2 ]. X5 R之后,就可以使用按键来查看文本。常用按键如下:+ e+ n9 |7 h# h/ k
回车 #向下n行,默认为1行
^" ]% d. T; g4 H8 M. k2 T空格 #向下滚动一屏6 i6 L( X* j7 n8 b
b #向上滚动一屏( N E( A. d* n) I% \3 H. Z7 L
= #输出当前行号
, A/ u- Y6 f H* f5 U5 ]:f #输出当前文件名和当前行号
* G" G! [' V6 u- X; C3 i7 p! Mq #退出6 v% t( y, [' i( p( a Q, i4 L* s
2.从指定行开始显示- P/ s, C3 {, r
more +10 file9 C- I. \2 S, f2 `; F m
该命令从第10行开始显示file的内容。
8 T" ~% ~6 z/ M, g f9 D, H* M J7 A3.从匹配的字符串行开始显示
: [2 i* O3 E5 \+ emore +/string file
# ~! o6 f( }; Q% [7 D; [该命令从有string的行的前两行开始file的内容。4 W. B* @4 H5 E- n8 b7 i
任意浏览搜索文本--less' l8 t$ I% q: w3 r* Y
[, F, q$ ]# mless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。) y: M- T& N( y# I
常见使用方法:
5 Q% i, P* }. g0 w. vless file #浏览file+ x: s1 p3 s( z: m0 o3 h' R8 b
less -N file #浏览file,并且显示每行的行号8 s& Z; ^. j! P" T9 z: A
less -m file #浏览file,并显示百分比
" u" U8 T; R% S- s6 P: ^常用按键如下:
6 b4 u/ G" s5 f! s1 {) e0 M/ Vf #向前滚动一屏
9 S6 u' M, P6 Z+ sb #向后滚动一屏# f" y) T& ~0 @% c+ ]7 W- S! S6 ]. c
回车或j #向前移动一行. h$ i; f: A9 c; k7 A/ ^: M" ~3 p
k #向后移动一行
6 C/ Y' g, l9 s* H' RG #移动到最后一行
" q- I0 y! f1 P, p/ Wg #移动到第一行
. {( W( K9 E3 h3 {8 V5 }/string #向下搜索string,n查看下一个,N查看上一个结果
& N ?/ D1 _! Q" P?string #向上搜索string,n查看下一个,N查看上一个结果
( s. ]0 T( L; D9 J3 dq #退出
% ^7 k% C8 ]# e; v相比more命令,less命令能够搜索匹配需要的字符串。" `% Q, ?5 N- m* w7 E- Z2 v1 [
另外,less还能在多个文件间切换浏览:
* g l) n. Z3 Q w" tless file1 file2 file3
& Y- j+ P% K- \8 _# V# n S:n #切换到下一个文件
* T( M9 i/ s u1 k6 T! r:p #切换到上一个文件8 m: h$ l& u {3 I! Y7 y# ? v/ ~
:x #切换到第一个文件0 F( n( I1 G* u, y
:d #从当前列表移除文件4 P6 n: m; N* R
显示文本头部内容--head
+ ^ G+ b/ [: E* R W/ W& `) z, u: r- u. {. {5 O4 h5 `
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。, m" p# z) t; y9 I F/ }6 r, I
常见用法如下:7 o( Z- S% B3 W
head -n 100 file #显示file的前100行- s" |* i" f& \8 T- F+ v, U
head -n -100 file #显示file的除最后100行以外的内容。
+ H! c6 D: i3 b0 v, V* k: Z9 R7 B4 T显示文本尾部内容--tail
/ q4 F0 Q* D9 y! x) a7 j4 s- n
& w3 L0 e0 O8 m0 [4 c和head命令类似,只不过tail命令用于读取文本尾部部分内容:0 l2 x( i: u& K F
tail -100 file #显示file最后100行内容
. A' T3 A5 p+ s1 X) q; gtail -n +100 file #从第100行开始显示file内容 2 i7 P- U4 y9 i& W$ V+ o( N9 [3 W* h
tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
$ ^. E3 _5 A U& N5 Z( K( `4 h/ dtail -f logFile
: q7 \2 H9 k* c! _4 N1 Z对于更新的日志内容,会实时打印到终端上,方面查看实时日志。
* c: ^1 y, ^& z5 ^& u6 x* K指定顺序显示文本--sort
1 U' I' i7 A0 @ D! _3 W* u- t3 v5 E' }5 ]' k4 n! T
sort可用于对文本进行排序并显示,默认为字典升序。# s5 G9 w0 @ Q* |6 e1 d8 i
例如有一段文本test.txt内容如下:: R7 z' R2 ?8 z
vim
; U$ N) `# r' L1 hcount
* T: ~6 W. ^$ d3 k! Z8 `: Rfail; m' D2 ~# w- M, |' O
help0 i. [- m6 Y1 x3 z6 n. C; L* |
help/ l# b u. F& f7 y T# A3 i
dead
) l9 ^, X9 a$ b+ X& q/ T3 _apple+ K5 u4 i- X0 r, ~
1.升序显示文本! U/ I) @1 c" f8 o9 n1 g% ]
使用命令:
+ o+ `$ Q' ] h% s# K9 z* rsort test.txt3 J5 a; f8 m5 n% S
apple
7 @5 [5 D2 E; a9 Scount8 I6 g# ]2 s% Z( h! v6 [
dead+ m( l) d+ ?0 {
fail- ?% H) r2 G) v( |0 V
help
% d. ?# X' [" S9 A) T0 J" V. xhelp. x9 [9 O4 V1 ~* m5 j# ~) w6 s6 J
vim
* ?4 U) W1 o1 `0 {/ a文本内容将以升序显示。
c3 u4 j, U6 h3 ~2.降序显示) J3 [* q! g! B- y7 o7 o
相关参数-r:
7 l( b% B; E4 z* m2 @1 ?( }sort -r test.txt9 D$ y$ X% u6 x- |' \0 `
vim: A; P" N0 }4 M' D. y
help4 m3 u4 p1 o" Y" B p: C/ Q z
help' J: e V( M8 b, `
fail# I4 @' a' l1 d
dead
2 n% w0 E) ~" _5 ?' zcount
! u5 G$ s- L7 K1 ` Y! lapple
3 u; ^! [* d/ W& c, O3.去掉重复的行
7 ^. D1 I3 c g* J1 F) }我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:( U" \8 \6 C* c$ S% p/ j' I
sort -u test.txt4 d& ]( ` _% j- H1 z! u
apple
- Z/ k0 y, g' r) n% |- [9 qcount
4 U" d" R8 T+ b }; adead
/ Y2 Z# O% y/ s) L# Z, E) Efail
: A: ^! ^2 P( S6 p( ]8 q, T; thelp3 E$ D! `( q, N4 {1 ? P
vim
7 @: t9 c( W1 s- n( W可以看到help行不再重复显示。; J+ [" |$ M) k# r7 Z
4.按照数字排序& F" c2 g! \2 w
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:
" H* I* u! H1 M6 vsort -n file" ?& \* P6 C1 \: T4 h2 g3 L t
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。7 y5 e# n! q0 X/ F) t7 K
过滤显示文本--sed& p' D7 p" I z
5 I. M% M! e4 \# t* B. esed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。$ M& a3 p8 m7 e/ w: a0 V
1.显示匹配关键字行
6 q5 x# y. O0 o1 b$ o- y; r' c3 Y有时候查看日志,可能只需要查看包含某些关键字的日志行:3 k. @% M$ e( i( |; f* c
sed -n "/string/p" logFile0 s3 n8 H4 I) ^
上面的命令表示打印包含string的行。
/ T, ?, ^ y' i+ _( F2.打印指定行- i' c; P# W& ?5 d+ d
sed -n "1,5p" logFile #打印第1到5行
* t8 }% d6 o) v7 M( A: C7 w U/ n; \; o ~sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号# y2 ~9 b8 J; @) k
sed -n "10p" logFIle #打印第10行
, f; @# [; Q& Z- P7 x- R+ T. X去重显示文本--uniq
) y4 g A! w. ^1 W! L
% r0 j, I! a# @# E常见用法如下:2 t7 ?6 Y( }4 c: d
uniq file #去除重复的行
( L' g! H3 H, N$ ^) V* u! O* Kuniq -c file #去除重复的行,并显示重复次数
: z: E" Q6 C* W' funiq -d file #只显示重复的行
* X$ v6 A/ r( [4 y) ]- g* Wuniq -u file #只显示出现一次的行; Q5 j$ M! {. F& a- Q9 R4 A
uniq -i file #忽略大小写,去除重复的行& Q* ~; W' [; K7 ]9 N( }
uniqe -w 10 file #认为前10个字符相同,即为重复8 i& u" ^: {2 a! d, z% p
文本编辑查看--vi; |; C, n0 t% {1 F" c$ ?
; `- n& r" t: f% |0 x$ g6 b- A
查看文件也很简单:
2 u! G, W# Y' h" P( V( ?vi file: L5 T6 E, S# b* y8 D6 H
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
! b4 E3 `6 C* j" b: T总结3 E+ N/ u6 t" g7 F. |& x! ^4 B7 d
9 o) n. u5 B) E+ c7 N* h
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
% J" u1 q$ Q9 [& S2 r4 `: p
|