前言
+ C% A( r" E: Z3 Q% ?
5 c, N1 q: V0 H0 ]3 j' tLinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。, E' j. H( Y1 a: m* W9 G4 d
全文本显示--cat
' ^8 B4 o% g! b b. m& ~. d c* b j( p P7 H" d( e7 B
cat可能是常用的一个文本查看命令了,使用方法也很简单:8 G* t! t. w0 o8 F% B5 m
cat file #全文本显示在终端0 f3 }& E! m9 g
cat -n file #显示全文本,并显示行号$ z$ }' e0 }, {/ ]
另外,cat也可用作合并文件:
8 S. m9 c6 k7 S! }6 N) Ucat file1 file2 >file3
6 {9 N& U9 C+ W3 @该命令将file1 file2的内容合并写到file3中。
; x* b. v) l$ P倒序显示全文本--tac
; o' V- [( h3 J6 {: V" s
/ P8 L5 z) O7 ~3 g) \tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。, Z3 H6 @9 e J$ ]; H+ S
tac file) w- N& s( a3 i0 \* t
分页显示文本--more
$ [. d' i- ]. j7 D5 \$ [. }2 u4 x# W
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
! _9 J2 W/ D7 I& F6 F1 S; m6 H1.显示内容
& W% H- O( d+ P4 s; T8 t; Bmore file- I" K* z4 h' m
之后,就可以使用按键来查看文本。常用按键如下:
, g# p) _& y) c, ^) @回车 #向下n行,默认为1行+ Y8 X! V$ A* b) @% u g3 u
空格 #向下滚动一屏
# J. i. N- |- y& A6 s7 jb #向上滚动一屏* X, S" u% k. e% y+ O9 j
= #输出当前行号) v( K- s' c u$ u7 w. i5 `, F
:f #输出当前文件名和当前行号
+ n) C2 ~9 B. ?; P, {! @- I$ iq #退出5 X K' k6 N; z q1 P4 K- x
2.从指定行开始显示
: Z, H" ^) q7 `: r; dmore +10 file
3 u w% s1 K& C) r f. K- p0 l$ q该命令从第10行开始显示file的内容。
9 @4 `% d; i5 w* X$ D2 ~4 a3.从匹配的字符串行开始显示! F- O3 ]& Q& U: E a
more +/string file
( b0 Z! y% z: B+ v该命令从有string的行的前两行开始file的内容。
! R! ]1 D( L; C任意浏览搜索文本--less
! \ I- Q" X: G
}9 R# v+ a! s6 G5 Tless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
- u, j4 }) t# z+ o" k# u常见使用方法:
7 V4 I! V Y6 s; m1 Nless file #浏览file7 k0 x9 \; M/ g. \4 G
less -N file #浏览file,并且显示每行的行号8 [2 G' c# q5 x" P
less -m file #浏览file,并显示百分比' W7 X) X0 z* P, |# r+ v
常用按键如下:4 ~3 j, \+ E3 k8 J, i) t0 }$ v
f #向前滚动一屏0 @! Z; ~6 ^7 b$ K1 B/ y
b #向后滚动一屏
" L% y% a* E/ ~2 Q5 _* p回车或j #向前移动一行
# f8 ^, J6 b& T; ]k #向后移动一行
! ]) r1 Z- T8 u: o/ }( E! yG #移动到最后一行4 A+ F$ A, ^5 `1 H" ~0 b3 @
g #移动到第一行7 ?7 p( H5 C# J/ |; a0 D
/string #向下搜索string,n查看下一个,N查看上一个结果
. w* M! w0 P- y4 r l?string #向上搜索string,n查看下一个,N查看上一个结果+ m. ~8 ]3 R% ?2 j2 f
q #退出
+ R7 x, @! t7 F& d( v# D相比more命令,less命令能够搜索匹配需要的字符串。5 e( E# g+ o( D- W4 }" `9 l
另外,less还能在多个文件间切换浏览: N5 T. g1 o6 _ }4 J; i: y
less file1 file2 file30 d4 k5 {6 u3 k9 F& e8 e1 y. }( b
:n #切换到下一个文件
) \- x. c' }' [ e( n' c/ N* |& d:p #切换到上一个文件
6 b" F! t6 I- v:x #切换到第一个文件
" u, s' A- `6 \, _:d #从当前列表移除文件+ Y8 ] ?0 e/ K5 x( d
显示文本头部内容--head
5 Q' ~ s( ~9 e3 p9 C5 A8 x: o& N: H( f- T
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。
+ |2 e1 n9 U7 {- |; g常见用法如下:
1 p! {5 I* I$ S( d# V& Hhead -n 100 file #显示file的前100行
8 @! c2 D4 \4 `head -n -100 file #显示file的除最后100行以外的内容。
& T+ w+ L8 i* h8 @& G* s$ Z显示文本尾部内容--tail. t, M( Y/ ?4 A: f2 T# Q' K
9 [! Y" U2 y- e( _7 _1 l$ a2 X和head命令类似,只不过tail命令用于读取文本尾部部分内容:. @/ ]) s, Z& N# @. I
tail -100 file #显示file最后100行内容
% ]5 f* H! B; s8 S5 K9 C# Otail -n +100 file #从第100行开始显示file内容
9 z/ |& {# o4 f6 N1 ctail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
6 m3 o- P, ]* V. z0 Etail -f logFile3 ?" X5 `) T0 V2 L! f
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。
5 z; K. K7 ?* K7 l3 w6 Z! o& h指定顺序显示文本--sort
# l4 X1 H/ A( O8 |- C
I& u' a+ A$ }5 V+ Y8 l ?, Gsort可用于对文本进行排序并显示,默认为字典升序。5 Z( b/ r7 V. E6 Q
例如有一段文本test.txt内容如下:* V6 z, J3 }4 `: C K5 ^* k3 ]# @) ^
vim" Y2 V0 O6 O6 k* Q
count
' K( @: ]/ s' \: O; `2 ^) H$ Afail; o2 d! C' x- n5 n2 z/ T+ z
help
9 z; ?2 T9 b! W; V. ghelp
6 Q8 j! c. v7 `6 [' Xdead+ X. X* u) H# w9 ?1 w) q9 `
apple
+ w5 _0 s% V" |/ w4 q" J1.升序显示文本
. C, t' P( N) ~5 C8 \使用命令:
$ _2 @& C) u0 |; Jsort test.txt# T9 ]: d& \4 m& M
apple
, U- ?: J" a) s- m, V! h: _! Z& dcount+ b& |" o8 C4 t% m( i4 x% b: h# ]8 P
dead+ J' T3 w* I+ S7 w1 d
fail- ~3 V* v. ]: P9 j# W7 t q5 K0 n
help
7 d) c3 Y [$ C; ^7 A; h8 Xhelp
1 @" N* ~+ q& b& j" Kvim
E4 i' b3 X3 F% x1 m文本内容将以升序显示。
/ m. r% Q. `& {$ Y. s$ e: c5 e$ n+ R2.降序显示
: M, U8 p6 Q" u M6 L6 S* ^相关参数-r:# z! ]2 C: [) h1 |
sort -r test.txt$ U# Q0 y. [3 `. p+ f( ?
vim) l5 P6 s4 `& @; Y2 k# @2 `% s
help0 D: Y: U- ~% W1 o ]7 e
help
6 j' z, n1 D2 Q$ lfail7 N4 ` w) \% U S |2 {
dead
7 R6 f& q8 }2 s: Y/ Acount3 _ e( o5 ~" d% _% D7 Q
apple
% l4 R- X4 A0 l1 M9 }$ f3.去掉重复的行
" g2 S) L- |* m# Z/ _6 ?我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:3 x$ n) z4 ^4 D+ }2 ^/ x8 @
sort -u test.txt
: L) r3 T8 p" Z$ d7 }, ~; r. F6 oapple3 i0 ^' R3 u% }( y/ n8 d
count& B% @: Z5 |- V/ V, _4 V! w. p3 R, K
dead6 ^5 t6 [ i$ [* d
fail
7 O7 a! }" f' T' Vhelp
b1 {2 T! c* i& f: a( N" ]vim) y2 b& D( E9 M
可以看到help行不再重复显示。
* _( p; O- G0 L$ [/ E2 N4.按照数字排序3 [- U+ |/ [# j2 _0 t, m
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:
! |/ D- Z: D0 ^- G3 `% W2 C; ]sort -n file
. y6 e6 j8 O1 x: k由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。: Q+ J3 d; s) P7 o s
过滤显示文本--sed+ o" T+ G; F) w3 A/ o& p- F
% O3 p) }+ D9 _: xsed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。7 v" m- U% Z2 i) J+ D
1.显示匹配关键字行$ U; ^( U0 Z- @
有时候查看日志,可能只需要查看包含某些关键字的日志行:6 ?) H; `# z, r6 x0 ~
sed -n "/string/p" logFile- ^2 M$ _7 Q& d
上面的命令表示打印包含string的行。7 L% R& s- l3 E! y7 r; {/ ]5 R; y
2.打印指定行
/ d& ^. L' @6 {1 F& lsed -n "1,5p" logFile #打印第1到5行: B+ d! }1 u% u! K. ^
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号# i) A; U7 X" q( {4 s3 B# [# M+ f
sed -n "10p" logFIle #打印第10行3 ~2 j, j- b/ |5 m3 N
去重显示文本--uniq
* l' f' B. g. ]( G& I! j/ i5 F1 u
/ h) R9 j: W1 V; f6 t( q" o常见用法如下:- k: N+ b" U/ Q" u
uniq file #去除重复的行
( I/ [+ I- X$ J! U _( q1 ^ n; u/ Euniq -c file #去除重复的行,并显示重复次数
# j5 i3 A: Q5 M/ s& h% b( e4 puniq -d file #只显示重复的行 `! k8 a8 f1 F" H
uniq -u file #只显示出现一次的行9 I3 t& n( [1 h* Y9 `' F' h
uniq -i file #忽略大小写,去除重复的行
" e( w9 T0 }7 _" Juniqe -w 10 file #认为前10个字符相同,即为重复
/ z5 {( r- ^5 {8 X, H3 z7 j* \6 D; W文本编辑查看--vi" y7 G0 s( h$ i
b, y( Q% u, o( q% b
查看文件也很简单:
7 p0 a5 }+ n# e7 xvi file8 E7 r9 |! G8 ]& z* {8 `
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
4 Z& \$ T) Q& L% V0 f4 E( [3 a' a总结5 [2 j7 B# {2 K, ^2 P
- s! I$ R; R/ w& b) _文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。" _' S; W& i6 L, l( J; i
|