前言: k1 Y# @) ~3 h/ b% u
( Q% x; w; ~" Y; L7 r
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。1 i) P6 ^9 g/ ^3 O) D
全文本显示--cat
' c. O* V% T8 ]6 p2 v/ J% E, _0 q/ T! [
cat可能是常用的一个文本查看命令了,使用方法也很简单:. T8 w3 q) q: y( x6 P/ P2 @7 m* _
cat file #全文本显示在终端
: Q2 \- e9 l$ N3 d1 Y$ y5 x0 @cat -n file #显示全文本,并显示行号, J& q* h! b7 l' V
另外,cat也可用作合并文件:
$ \( V$ ~* u9 x0 z# s# kcat file1 file2 >file3
. b& v3 B+ m$ d该命令将file1 file2的内容合并写到file3中。; o) i) l- c, ^8 F7 H5 z
倒序显示全文本--tac D/ R* t+ U! i" I5 f2 K) z
8 m6 u6 c0 E' ~- b- ytac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。/ Y) f! p1 {5 I# u* }/ I4 V- l
tac file/ | U' v, _$ P: j: Z E, E
分页显示文本--more9 _* e& P& ~3 o- j
: u% N% f) |& }1 Q! D2 H
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。: ^* c, m) m7 ]) d9 d
1.显示内容* f* [) r! s( z2 \, e5 Z
more file8 X! @% W: \1 M; p9 O( L
之后,就可以使用按键来查看文本。常用按键如下:3 Y y- J+ u; @4 R- s6 @/ k1 y* B+ b
回车 #向下n行,默认为1行2 s* L& G. Z- B
空格 #向下滚动一屏
. u3 X+ w" }$ l4 ` Db #向上滚动一屏
- ^( `( U2 N4 P3 w= #输出当前行号
: B* `& T: B. k/ u7 Q3 H3 T:f #输出当前文件名和当前行号
$ O& l3 U9 z! X: l) w6 h9 t& Vq #退出
) X3 c) t' v! l9 T) k( e( a7 ]% ~2.从指定行开始显示
+ j i. o; a* Nmore +10 file
0 ]- F3 |$ j1 O; ~9 I' m" ^该命令从第10行开始显示file的内容。, r b( E/ h4 R* D8 q
3.从匹配的字符串行开始显示
8 g8 q0 h2 e# I; O7 Cmore +/string file
( `: i% s* d1 \1 ^( d0 |该命令从有string的行的前两行开始file的内容。+ `. g, t4 h4 j w+ t) e
任意浏览搜索文本--less% j% ^* F0 Y$ D3 f7 l" B0 a
5 @$ H2 G1 L: l5 J8 r7 u6 xless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。 Z `6 `% P* ?% M- k; A# U
常见使用方法:, z2 H* M/ A; h; ~, x
less file #浏览file
$ R+ v! {% K- H' H2 K2 hless -N file #浏览file,并且显示每行的行号
3 a4 U8 p* o4 r' G+ l& Cless -m file #浏览file,并显示百分比( e- R# A0 E* m# E
常用按键如下:7 I7 C- S6 J/ V) s$ z+ E' L
f #向前滚动一屏
1 V {/ Y+ W0 Y, Pb #向后滚动一屏: `8 s: b5 B8 E+ u4 x+ k7 K+ O2 f& r
回车或j #向前移动一行
9 k& r1 h0 E: H% m4 B. U. |9 h% Z# sk #向后移动一行
. ~( w( V% Z7 ^G #移动到最后一行7 f0 o$ i( X& m7 ^ P% l* K$ D
g #移动到第一行' M- p( Q9 h1 X! n/ h- t( N
/string #向下搜索string,n查看下一个,N查看上一个结果2 m" Y3 y5 I; d( K8 F
?string #向上搜索string,n查看下一个,N查看上一个结果/ m4 |" N6 A o4 O- Q' B
q #退出
5 x& c9 l+ ^5 M相比more命令,less命令能够搜索匹配需要的字符串。
4 a2 G+ V6 `8 M9 R- e( l$ V另外,less还能在多个文件间切换浏览:
B: `) r7 `, {/ l3 ^less file1 file2 file3
- p) \; l) Q; l6 N0 i" g:n #切换到下一个文件; q( T) R" K4 a4 T& P( V
:p #切换到上一个文件
& C c! C8 }1 E, w) k:x #切换到第一个文件' L" y- V0 ^. d6 k" s
:d #从当前列表移除文件
: X" l2 {8 R, Y# ~显示文本头部内容--head& ~3 v- X' U! e9 j/ y9 x
8 e9 t! M+ G: @
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。- @) L% {3 I4 O- ^, T6 ?5 ?
常见用法如下:, Z; {5 s& A% V3 O( i+ o) |# `
head -n 100 file #显示file的前100行* V ^3 g& Y% }2 o5 o* v
head -n -100 file #显示file的除最后100行以外的内容。 4 l( C# i0 b, U+ d, I
显示文本尾部内容--tail) ~4 `( i% c2 j0 x; s) W
( C4 m9 Q8 q: I6 G. g' W2 j
和head命令类似,只不过tail命令用于读取文本尾部部分内容:; [7 V0 t3 d$ ?$ s1 ?
tail -100 file #显示file最后100行内容
: @7 s8 C9 F4 q, |/ i" }/ Qtail -n +100 file #从第100行开始显示file内容
6 z. t {& V7 u" w7 X: @tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:# F# _5 f: Y: ]5 q6 R# d; M$ h, l
tail -f logFile
3 c& Y `' n: J: X; l$ M1 ~1 v对于更新的日志内容,会实时打印到终端上,方面查看实时日志。6 u3 [4 o: R, Y# |
指定顺序显示文本--sort- \4 e- B# N3 P$ n+ y* W
% K6 [$ J+ j; N- |( v9 hsort可用于对文本进行排序并显示,默认为字典升序。2 p5 u6 \5 V. |9 M) u) S5 l
例如有一段文本test.txt内容如下:
* E O/ G5 N" J& ^7 tvim! V& y% T$ r# w
count/ |1 {8 R- X: V% z( l
fail" N0 _* K( f W, N
help
1 Z5 o, c9 q- v7 G) _6 rhelp1 o6 x( a3 ^& a/ ~% o
dead
2 c( A" C# |* Bapple
& I1 a$ b6 B9 K1.升序显示文本2 O: p+ F. r9 `, Q! i! A
使用命令:# S7 F; I. n; u" |6 T
sort test.txt Y8 R- T8 c) r" V; G* }
apple
; u0 f' M5 ^; V7 P5 {3 }$ e# wcount3 t# y' j* t8 w; w$ e4 m( G
dead7 b. @* e; K& s3 \. `2 i( ?
fail
4 j1 x, d: W4 Q7 [6 P; Hhelp
+ ]; I2 I- j( G( ohelp9 S$ v4 H- p @$ |. K7 n% N( X
vim o7 K7 r! y9 z3 Y0 S
文本内容将以升序显示。
; I. f- Y, _$ X a2.降序显示
0 M+ R3 b4 c6 x9 k; c/ }2 w0 K相关参数-r: I+ t, C& T2 q5 t( {) }7 f) f
sort -r test.txt& F k7 [3 u% K! V6 o( R v
vim
J( X+ U" t# {$ U @* X4 x( Zhelp
/ [; h' y& h. b r+ W( N! b' bhelp
) ^3 R( b ?( ?" A. Wfail+ D$ X1 G- f3 b; p% N4 B2 l
dead
* T! W6 g2 c/ K/ z8 e `count1 q, \0 V. u. O% A2 K
apple
! }1 F, D" D) S( F4 j1 L H/ t3.去掉重复的行 I+ ~! I9 T4 w; z g
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
3 m9 b* O7 }; A/ a5 @sort -u test.txt! T# f9 @9 e& b- k& p- }4 N* f
apple
9 K+ o+ o4 r8 Z- gcount
) c3 t% ?- [/ v$ S t R. `9 Zdead: W; K" K1 a, W2 `) P4 ~) [
fail. J# t3 H0 T7 j/ V
help
* S: d3 V& T/ Hvim, N0 {: F; I( ?0 n" S9 @% M5 k' {$ \
可以看到help行不再重复显示。
' w) M" V* w% E& A! E- v4.按照数字排序
+ t* m) _/ e9 D; w如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:2 H/ U, g/ p f i2 l; ~
sort -n file
[7 e: u4 |0 M, Y0 O! t& P由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
* y+ }" }& t7 t, Y$ r* O; j过滤显示文本--sed+ k4 H' ?) e) B4 `
1 ~& @# d9 P5 f% }# Q
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
+ d1 Q7 Y2 W' l4 s+ S1.显示匹配关键字行0 g. }3 s, k% L0 \) _. G+ A
有时候查看日志,可能只需要查看包含某些关键字的日志行:2 w* a8 g7 O, n
sed -n "/string/p" logFile
) i' s8 S. d% ^+ w上面的命令表示打印包含string的行。( U8 a5 A4 p% F9 d7 [) J/ H
2.打印指定行
1 o! I$ T" `' osed -n "1,5p" logFile #打印第1到5行
3 L0 a( g3 ~9 b3 J6 csed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
) f3 r8 U8 E- n z( Nsed -n "10p" logFIle #打印第10行4 m+ B: c# ] d) v
去重显示文本--uniq. b8 U! B1 j! ~7 s
9 M b+ }) S: L3 r; {6 D: l3 R; L
常见用法如下:, V: ~5 \& {# l# y% |# }
uniq file #去除重复的行9 S4 g2 n4 n0 p5 i j6 W5 Y
uniq -c file #去除重复的行,并显示重复次数; y4 z* Z7 O2 M& S
uniq -d file #只显示重复的行
0 J+ a* H- \! ^8 \7 H0 juniq -u file #只显示出现一次的行
8 S- B( A* A. O: y! {uniq -i file #忽略大小写,去除重复的行
9 Q$ z- H3 X2 E6 T# Euniqe -w 10 file #认为前10个字符相同,即为重复0 n/ J: X4 D- R# H! ]
文本编辑查看--vi
9 A- r( M$ V" \! |9 ?) r
0 @9 o" _, N% a" w查看文件也很简单:
$ j8 Y/ w( o x5 o3 Tvi file; ?9 m- a& ~3 t* C6 s
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。6 V6 A1 T) u; {& h% C5 ]7 Q) C
总结
. Q0 D; K& ?) T! k. D+ S! o" I8 w" x, r
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
# t% O8 k+ ^% A) Y9 ]: H; [3 g
|