前言
9 W# J6 n- y- t( v6 K
8 x, Z, c/ ?- B3 |+ A2 M! JLinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。/ F- S2 b' C. @2 m
全文本显示--cat2 F$ ], V$ j. f
0 [1 m E. p4 {" k5 B
cat可能是常用的一个文本查看命令了,使用方法也很简单:
M9 W: h8 h1 x3 acat file #全文本显示在终端
E2 ^- t. J. `3 A4 ocat -n file #显示全文本,并显示行号% |3 U0 W9 K1 N, O" d, `0 ~
另外,cat也可用作合并文件:
$ A5 a+ P0 i5 Q* x4 wcat file1 file2 >file3
* M3 P$ _# \' \该命令将file1 file2的内容合并写到file3中。
9 a* g, _* U5 G倒序显示全文本--tac
" J* |5 o6 F$ T6 U* d- |
6 t2 ?0 P0 y, I* u. [tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
3 r/ W0 D, i7 _ F y- D! Jtac file
7 e: ]( B) \; o+ O R分页显示文本--more
1 H0 l5 C% P' G5 V/ _% y
" `5 C" Z6 W8 E g# |0 A/ j2 Zcat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。# @3 B6 M5 _4 V& }; ]
1.显示内容
; K. F) U) R3 h* |7 V# _4 d/ O# D6 U: b' b1 Rmore file/ p& h* k2 R( A6 o$ d, B0 @' i
之后,就可以使用按键来查看文本。常用按键如下:
( N7 S4 C/ S2 R1 a- v回车 #向下n行,默认为1行
7 \ {* e! q6 G* V' ?6 u空格 #向下滚动一屏9 H& W& ]+ h, k) I' I" ?4 n
b #向上滚动一屏
" P; a2 {* R, A/ r- I# R7 A= #输出当前行号
# b9 g. y3 D0 ]7 N:f #输出当前文件名和当前行号5 L$ l @( Q9 }) y
q #退出, T" h; n8 Y: r3 X
2.从指定行开始显示
+ d- R1 |8 p, O( I f: ]' rmore +10 file& U: B( P+ D; b' M5 m
该命令从第10行开始显示file的内容。 q( i5 z/ G# E7 G+ |
3.从匹配的字符串行开始显示4 @8 M3 C8 v" u2 {* q7 T
more +/string file
5 ^4 K4 P* f% |' a* }该命令从有string的行的前两行开始file的内容。
6 N e# p+ `0 L3 {任意浏览搜索文本--less+ l" ~8 o) X% |1 X
! N" [- W0 i( ^% ~less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
. v# b5 S% v/ y* T* g( i常见使用方法:
+ X! X) d' }2 `( p8 Qless file #浏览file
0 @4 j1 I; p* V, G$ G& }0 j3 o1 gless -N file #浏览file,并且显示每行的行号8 l9 }, N+ z. |. i8 Y: P% b
less -m file #浏览file,并显示百分比
7 U1 j/ y0 t$ A: W: S- h e常用按键如下:% Q. H7 q; C, @! b/ j) i: [
f #向前滚动一屏
$ D5 K9 }9 u2 k* `b #向后滚动一屏/ P: w: g* k$ H
回车或j #向前移动一行
% j( e( l! S* s' z8 f' g& D: Pk #向后移动一行2 B% i6 \. f4 l; e
G #移动到最后一行5 G' r. Q" ?% M. E
g #移动到第一行9 u+ p( S3 M. Y% o
/string #向下搜索string,n查看下一个,N查看上一个结果 Q2 ~2 U2 c) M! @
?string #向上搜索string,n查看下一个,N查看上一个结果
1 A" B0 E" Z) d m7 hq #退出
4 r# Y) Z/ P# [" S相比more命令,less命令能够搜索匹配需要的字符串。: {5 S5 T# r# Y4 _" d9 x0 m
另外,less还能在多个文件间切换浏览:3 P, x7 w/ Z$ z. S! C& l
less file1 file2 file3: P3 X( | ^2 ~" L
:n #切换到下一个文件1 A+ G3 a8 N( n8 e3 ]
:p #切换到上一个文件) P# _9 R2 u' z* _% `
:x #切换到第一个文件
+ [0 S, v/ f5 o8 x+ f:d #从当前列表移除文件% E5 r9 T5 n- g! [' h
显示文本头部内容--head" K% m6 E$ D w/ z& Q* m
( Z1 q2 h7 S7 l" s: X8 ghead命令的作用就像它的名字一样,用于显示文件的开头部分文本。8 E+ W1 E& W! t' n, k9 Z7 @
常见用法如下:
- {* z, S; I% |: j2 Jhead -n 100 file #显示file的前100行1 n4 h- ? P% z; ?! _2 t O
head -n -100 file #显示file的除最后100行以外的内容。
7 ~. W% w" M, i! P& N3 p6 ], F }, U9 @显示文本尾部内容--tail+ T5 `0 l% ]' N- d5 q, b
: t9 S0 c E3 G" }/ Y$ H9 C和head命令类似,只不过tail命令用于读取文本尾部部分内容:/ {& u; g% s5 N# D
tail -100 file #显示file最后100行内容
+ z0 J( z3 e. E1 i# f) Ctail -n +100 file #从第100行开始显示file内容
0 u! a- ?" O; y3 H btail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
: C4 c# C( `. s$ o' m6 {tail -f logFile
3 D2 ~9 `4 b! | c+ A6 V对于更新的日志内容,会实时打印到终端上,方面查看实时日志。1 g$ @7 |- E9 w
指定顺序显示文本--sort
3 m' E2 E2 Y& X2 _* g& o
; z0 z' B H6 C7 S0 [* psort可用于对文本进行排序并显示,默认为字典升序。! g7 e) u6 z& O( N$ e& S
例如有一段文本test.txt内容如下:
2 `+ r- T$ B) ~5 ? pvim
! d, I7 v0 ~4 d5 A O" Ycount) d0 ^; h: ~8 [3 [ h( G) Q
fail6 y; q/ o# h7 M0 D6 e e
help
" w7 r# W. H( P7 bhelp
4 G4 R0 w3 N0 `- gdead
7 r1 [/ d/ w. d" w; iapple. d9 P( Y7 c4 W- [& e/ Z3 c/ i e
1.升序显示文本1 x, o6 @# m$ |) U
使用命令:8 _6 n; J8 k1 ^7 F
sort test.txt& j9 z7 o8 F/ i1 A
apple
+ {4 E' h9 `7 vcount5 S& t2 r: X0 z3 U
dead
3 k9 H* r8 H6 i' R4 x3 `fail
4 G/ _+ X! j- i) F5 E5 |$ Lhelp
7 C. u6 B' C1 ]/ Z7 nhelp5 }4 v% [9 U4 X* y8 L. Z$ Q( p6 @
vim
6 O( N$ f0 O j% x+ b7 p文本内容将以升序显示。: H0 f7 r+ d3 _& G+ f: l" h! O5 x
2.降序显示
" c& s- X% a+ m! p* U相关参数-r:
! S. T$ J( |2 p& H2 }sort -r test.txt
( D( L# B( B9 ]) vvim! x8 |" S& `+ f& G
help& |5 _# g* ]& U( K8 G/ L
help2 y2 U v L7 w) r0 n
fail
% b R @$ c) Z" E7 ddead
, T6 }* n( n) {$ v! Tcount O( o% I* {9 D
apple) Y1 T9 b3 e `- \: x" ?( ~$ p* j
3.去掉重复的行
~7 }5 y/ \/ ?0 P4 \8 a我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
, H0 x2 g3 |) J- o* o* jsort -u test.txt. R0 B2 Y; Y0 T1 s' @
apple4 w! c3 p2 j$ K0 k+ B$ ^8 i
count
) E b' U+ \3 C6 F# Ddead
" F* I: t. a" g C& Efail
3 o' B9 ]6 \" s5 a8 N0 p! `help
( e* @+ O4 U' X) H9 C% kvim
- R. ~, w) M* Z o5 ]可以看到help行不再重复显示。2 Y& s- l6 t% {- s' H
4.按照数字排序
3 e: v9 |# A% s% B如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:) J2 n: f0 M& e3 g1 h
sort -n file" _) z9 s* i- h7 W! u
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
* r! c) s: V) N过滤显示文本--sed$ n4 V/ ?% ?" r
3 h/ U2 [% p5 M; c' Psed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。, t" [; _2 i- T8 W5 k5 Q& f& c
1.显示匹配关键字行) g; Y0 ~, j2 v
有时候查看日志,可能只需要查看包含某些关键字的日志行:3 n1 `5 S" l# {2 z8 f% P
sed -n "/string/p" logFile6 ~! v+ ?& ?! W5 Z: D+ }
上面的命令表示打印包含string的行。
! }4 u9 i5 c% ^+ o, B- w! g2.打印指定行6 z- a8 L3 {. K$ p- _" |% w: C
sed -n "1,5p" logFile #打印第1到5行3 M# I$ X7 f2 J
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号 A3 i* n7 N7 z
sed -n "10p" logFIle #打印第10行& @' u1 {3 y4 p4 @$ Z- {
去重显示文本--uniq
$ M; t, N7 e3 |1 g' z9 I* v O& k2 u# w
常见用法如下:
7 X9 |: T4 `4 K& E, f" runiq file #去除重复的行3 t; `1 w# s4 k' _8 K, G0 Y
uniq -c file #去除重复的行,并显示重复次数6 i" l4 i+ P) h' q+ e4 R3 Y5 W
uniq -d file #只显示重复的行
' R# v, \3 C: i# x2 U( ?5 iuniq -u file #只显示出现一次的行
9 Y3 c: s- V \" H5 ~uniq -i file #忽略大小写,去除重复的行1 U* D$ v+ I. j" \
uniqe -w 10 file #认为前10个字符相同,即为重复( k2 e( K" E1 n+ Z7 Y9 |
文本编辑查看--vi
- A( s4 Q# s1 y. g# i; B+ Y
; [5 f: [& }+ @* g2 N查看文件也很简单:
9 V: G1 D' ~ `4 z* Uvi file
1 G( g9 H' w$ r6 s) ]而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
6 I# b+ s. c# |, M0 U6 e1 S9 t总结
5 C. o! T$ R$ N% C; [( g% Q) p* K% w ]0 k8 U- B& H+ T
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
6 U9 a( w+ t/ r! {
|