前言
0 J; x/ X, M4 z
* c0 M: F+ v- w3 eLinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。1 }2 z% t5 u, ~, g# `0 l% {
全文本显示--cat9 f1 B0 O: g. c5 d0 R
6 K& V2 m4 M1 `7 ?
cat可能是常用的一个文本查看命令了,使用方法也很简单: a; f' Y M9 S6 g- t2 `
cat file #全文本显示在终端' |( s5 j( B- k# }7 d% R
cat -n file #显示全文本,并显示行号% L4 ^' {; w1 ?( E) Z1 a
另外,cat也可用作合并文件:) V3 C6 Z" h9 f
cat file1 file2 >file3
) z% C, p' r2 k该命令将file1 file2的内容合并写到file3中。
4 q. N8 e( t% I4 u5 O) R倒序显示全文本--tac
C. G: a4 }; \8 O% l# a/ g* t. n# L) e
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
, R# |. b& x+ X" vtac file- z; E7 x, V# O; c' |
分页显示文本--more
; N8 z8 \9 d4 [ k- B* V2 s' k! p7 R6 l ^' r4 C
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
: I7 z! i3 E# V7 F6 L' a. F1.显示内容
1 x. G: H% S9 ~6 Q$ Bmore file
% W) r( X: _) B) V N g之后,就可以使用按键来查看文本。常用按键如下:
' _& j% N$ X9 L# L0 f回车 #向下n行,默认为1行) V6 |# C0 c) I
空格 #向下滚动一屏2 s2 T) d, r2 E& @; b0 I5 g
b #向上滚动一屏$ B) X9 v/ G( r {
= #输出当前行号6 L5 V& ]1 B$ X1 m* V5 I0 o; M
:f #输出当前文件名和当前行号
9 R1 f6 f$ j* ]6 [$ F, eq #退出% ~2 r- ?: k& C( T* ]2 L+ z) {# J4 M2 _
2.从指定行开始显示2 N1 @ N! s, j3 H+ F, _" j# R
more +10 file* q4 r; L. a* r m
该命令从第10行开始显示file的内容。
8 t% F' u6 [1 E% c/ A, }( C3.从匹配的字符串行开始显示
" m7 T$ R) P0 t1 U# W+ L% zmore +/string file7 W: m( Y, |. `3 n5 o6 [
该命令从有string的行的前两行开始file的内容。4 O, D6 F4 Q( z5 F
任意浏览搜索文本--less
# g3 ?6 U$ h) {% q+ r
5 M& G V# }5 e- D$ J+ R' Pless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
! l, Z( K% ^4 k3 O% A5 a6 Q常见使用方法:
! Q7 j: I" p( t7 k# [less file #浏览file- \2 g" K, u) I6 ?8 m3 P9 Z1 _( Y
less -N file #浏览file,并且显示每行的行号
: ]1 Q, \1 a# C2 ?/ Nless -m file #浏览file,并显示百分比$ r4 j8 V3 i1 T( m! w
常用按键如下:2 g9 K, ?% s8 j F+ _% m5 z* `
f #向前滚动一屏' }- I- C6 @( P1 W! [- y& ?* |- D: }0 a
b #向后滚动一屏
1 K! I1 [2 ^9 o0 R! i, F7 S2 G回车或j #向前移动一行+ j+ E: B" s8 h
k #向后移动一行
8 v8 z2 A& l; K, G9 UG #移动到最后一行. ^# W+ Q, w/ _ K- T" o* t
g #移动到第一行
3 F4 i: s! `' {) l/string #向下搜索string,n查看下一个,N查看上一个结果) C1 O X7 n- r9 H; G7 p
?string #向上搜索string,n查看下一个,N查看上一个结果* [% b: S9 I. `$ w ?5 x; M
q #退出
. o5 `$ ]% Z3 U$ G相比more命令,less命令能够搜索匹配需要的字符串。 X( x$ x* S7 t) ~8 u: l
另外,less还能在多个文件间切换浏览:: {$ |: ^; Z( Q# d1 f5 Q
less file1 file2 file38 E# P1 x. p- [- m3 {
:n #切换到下一个文件2 W5 K) ?5 R( }- R" r0 g7 y/ \
:p #切换到上一个文件8 {! I4 @9 A7 x7 W/ \
:x #切换到第一个文件7 \7 l z) [3 s; }( c( E
:d #从当前列表移除文件8 `5 M# i9 w9 }, c" s9 B
显示文本头部内容--head6 x! C( v4 M. E0 w4 Z: F" e1 X
' N- ]: c U' u1 p5 p9 lhead命令的作用就像它的名字一样,用于显示文件的开头部分文本。7 n0 g# G3 M4 S) {
常见用法如下:
& Y+ K8 o) J9 I, M* a, whead -n 100 file #显示file的前100行
* B2 Q1 V# X$ G2 E7 Qhead -n -100 file #显示file的除最后100行以外的内容。 0 \7 {. }! s' F" V( f0 [+ {' g
显示文本尾部内容--tail$ S% \8 A' A0 r) q) _; P
+ g; u, S$ n$ t+ u+ X
和head命令类似,只不过tail命令用于读取文本尾部部分内容:2 U; W( `4 W5 R W9 e2 X/ y) Z3 P
tail -100 file #显示file最后100行内容
& Q! `4 Q7 r }( l: Ntail -n +100 file #从第100行开始显示file内容
3 S/ E& Q& c9 D+ u( etail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
4 c! O1 E) I( }) r$ q2 O5 m0 ctail -f logFile& J" g( y5 U! [! B
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。
" E7 z" I5 k. m$ R( ^/ w0 O指定顺序显示文本--sort6 i& p a% l3 i# x9 g! n% t% j2 s
" y {2 P8 I# p9 v5 F
sort可用于对文本进行排序并显示,默认为字典升序。: G: H ]7 A. Y0 ~( `- S
例如有一段文本test.txt内容如下:2 B7 Y1 w1 O* L8 V- r" l4 r
vim& p5 p. _; s' r0 e: h, m. p8 A
count6 ^4 f8 ]0 x) [+ h
fail
9 n0 |+ c# B# k3 o& uhelp) B, ?- z/ T4 v* Q' T$ }- _
help
# G, d' Y: ?! R1 i* Z8 ldead
- z; d m5 R8 s6 I; x; R( dapple
: }' W5 S1 e0 A. v1.升序显示文本' t: Z( g3 e" X
使用命令:
. P. n: c% A" v. ]sort test.txt
# ~* s2 I* d. b3 b7 L5 vapple3 |* G/ r* {" N0 i% Z _
count
; Z( i8 X9 `: h3 B1 a" h2 mdead- }1 W( S- b/ |5 t
fail
/ }& n2 Y ]/ dhelp. s- O$ v9 ~9 G3 T9 l
help
3 }& W6 f4 [+ q& Avim
9 h' m% w7 B1 ~) k0 e; A文本内容将以升序显示。0 o% t% ~& Z- x. h; ~* x. Z
2.降序显示
5 u$ \" Y- {/ ^" s相关参数-r:
% H1 a. h6 E7 Q2 p/ x+ g! U0 w. Bsort -r test.txt3 F1 R5 `* Y4 H; A6 g. N9 U- z6 c' b
vim7 e( J' S6 P* r7 n8 @ O! }
help5 [( \- r$ H3 X/ m0 @7 l
help
- `6 Y! b' j8 G9 i: u! X! L0 E: `fail- I* p3 O1 g4 W& B# J
dead
F) P2 y7 r+ h5 ocount
/ A# z. _4 _( p8 ^1 happle7 J0 V/ w- H$ @+ F" g, |
3.去掉重复的行2 A1 ]) r/ O( P
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:0 a0 }/ v: c: {8 L2 f8 d
sort -u test.txt. X: x/ h! F# e- `9 ~# j
apple
S# d L: g6 S7 Ecount
6 O5 S) D' K* L; o* Hdead
3 P1 Z# |/ A3 G% X d( Lfail, T) \; |* \$ D
help
. t. b% c; d+ j5 C. |: R, \vim
! Z1 b- W) O9 D可以看到help行不再重复显示。1 ~* N9 e5 i3 Y0 {+ O6 C8 w. l8 W
4.按照数字排序+ S& ?' E* \0 J2 o; O) [; j& r
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:$ R/ N! p* ]1 ^7 K0 g& z, V
sort -n file$ D$ A, N8 e" @# N8 v
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。7 U, H. o" Y# U8 X
过滤显示文本--sed
2 ?5 l, h* P1 X; X0 T0 s0 u
8 D; ^" g( w8 d6 R) rsed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
# O: t* Z: N4 H' Y8 s: n' c4 n1 v& e1.显示匹配关键字行
$ H8 H6 d2 P/ D* G& P1 a有时候查看日志,可能只需要查看包含某些关键字的日志行:
F, z' b: F$ |' B* wsed -n "/string/p" logFile
$ k( T k5 M7 L: P4 n4 {+ ~" M上面的命令表示打印包含string的行。* F- @! t* d/ P8 A2 n a! s9 L
2.打印指定行
1 B4 K" t! E4 A! _. qsed -n "1,5p" logFile #打印第1到5行* B3 @4 v; A* P
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
$ X9 e- T2 s. x6 f$ t# _6 ?sed -n "10p" logFIle #打印第10行& C7 ^) f3 ]! M! `6 K5 z
去重显示文本--uniq; V: X6 U* P3 T8 P6 Q" @
/ L$ ^* x( ?. P$ ]* x; Z; D常见用法如下:
4 l' H D' b! g) \5 R" }uniq file #去除重复的行
8 v/ F$ ^$ J3 yuniq -c file #去除重复的行,并显示重复次数
; _3 [0 k) B8 puniq -d file #只显示重复的行
; r+ r9 g& Y7 u( _9 N+ L3 J3 n- W7 \uniq -u file #只显示出现一次的行
8 j' g# Y6 U8 n" C/ Runiq -i file #忽略大小写,去除重复的行
7 f' B4 s1 B4 `+ funiqe -w 10 file #认为前10个字符相同,即为重复
$ P% L4 o' Q2 w+ \文本编辑查看--vi ?2 l' t) A1 z# o/ G( F
. O- Q, l* J3 S$ a! F
查看文件也很简单:# \, @6 Z" C$ l2 g( l
vi file' x2 T* J; P. R: m; o2 Q6 W9 j
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。2 ^- l7 @, q# u2 U& i( M
总结& U7 E. }- M; d) ~3 V R
" f7 J9 b9 A9 S( ]0 A. b* q0 Q8 n: ^
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。- V+ C5 m( n% {" {) t% Y1 \
|