前言$ R6 H' T% c/ w4 Q
& H2 {2 D* ~/ v& [; @5 W2 DLinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。$ v$ ?; \+ q! m! U1 k+ S. o
全文本显示--cat
; w7 y+ W8 T+ v! q5 A5 S/ b1 W
cat可能是常用的一个文本查看命令了,使用方法也很简单:1 w* k& \ G4 Z7 H/ r' x
cat file #全文本显示在终端
$ y3 F8 Q3 k( d6 o0 ncat -n file #显示全文本,并显示行号, V1 q( H! y! w/ N1 s7 b, j
另外,cat也可用作合并文件:& [* P# s" g e2 J$ b1 p
cat file1 file2 >file3
/ q9 c) M+ F4 t/ n该命令将file1 file2的内容合并写到file3中。! J7 G8 ~0 X' ?: j" [
倒序显示全文本--tac
( J( v. J) M- F0 Z% \( ?7 H' C7 M, y! I8 Q5 A
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
. T/ S4 k4 a; c! a( ^tac file
6 l# u A7 y6 x8 m9 X& A4 l分页显示文本--more! g/ ?$ {6 t7 [
3 w5 t% K) d wcat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
1 s# l- k& d2 Q1.显示内容+ i7 P6 ~7 u& V5 j
more file
/ ]5 d1 C$ w' g! V) S! V- z之后,就可以使用按键来查看文本。常用按键如下:
# b# T4 c; F& Y u. y0 X回车 #向下n行,默认为1行( ~7 ~, l. x4 }3 d. P1 I
空格 #向下滚动一屏. h" W- U+ C1 \" l- d
b #向上滚动一屏! v! V7 _% C* ^; K0 v5 Y, E
= #输出当前行号: G; n( B- \9 z5 K( I" [
:f #输出当前文件名和当前行号
6 c; X: I( T$ o6 s2 l3 tq #退出
2 w8 T' t5 u3 f- G2 w9 [4 e0 K2.从指定行开始显示+ f! y1 f. w" D4 I, Q; D
more +10 file3 _. ]! B: S% q
该命令从第10行开始显示file的内容。& u" a/ @4 g% I/ ~
3.从匹配的字符串行开始显示
+ \ H; V0 R1 {more +/string file
( g6 V* Z# G3 K. K: @该命令从有string的行的前两行开始file的内容。4 y: o. P2 Q f% p; n5 X! X; g
任意浏览搜索文本--less( @$ d) R6 O' p. K
: A- L0 z. t: Q' n/ c& C( f6 S4 f
less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。/ v% z, R# L9 }/ {( i( ^
常见使用方法:3 R9 L* _7 y4 V" }1 j- |- u
less file #浏览file( q7 ~7 M( C2 r3 d
less -N file #浏览file,并且显示每行的行号
# R, ?' \" C, s. R: z* p3 Nless -m file #浏览file,并显示百分比2 S8 L. k5 r) W: h* l1 V
常用按键如下:. B" Q+ B* o8 o4 V' M
f #向前滚动一屏$ U+ D) E8 b4 f( S: D- |& l/ d" U
b #向后滚动一屏
* b: c2 Y$ U! t2 R* K* Q! J回车或j #向前移动一行7 f8 t$ [$ \- Z" e$ A1 I
k #向后移动一行
) \( V! R" j. zG #移动到最后一行$ }2 ?% d% ?/ F3 ]2 F2 y
g #移动到第一行
! E* }. n0 Q6 Z2 g! V# P/string #向下搜索string,n查看下一个,N查看上一个结果2 r& Z0 n: U6 ]3 r3 s& _
?string #向上搜索string,n查看下一个,N查看上一个结果) D4 F- \& |) g ?! R6 v" Y) Q, _
q #退出; S ^! \) S( V. E
相比more命令,less命令能够搜索匹配需要的字符串。7 Q: G `. a- v2 ] m& `
另外,less还能在多个文件间切换浏览: n6 b, E9 m/ M4 i8 j& n
less file1 file2 file3
0 M+ V/ P7 x/ R E: c4 n9 S:n #切换到下一个文件+ \2 i$ r/ L0 h7 G5 y6 y
:p #切换到上一个文件
: U' s/ F3 Y2 p9 W' Q ^:x #切换到第一个文件
* h8 x; v6 Z( z& I, G, I# b& q# w:d #从当前列表移除文件, y: _2 q& E% w& L, k
显示文本头部内容--head2 l. V r7 X; ~/ ?1 G
! o. y% o& [1 S+ k0 Y! f# m& Q
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。9 Z+ a9 ?. f4 h* g
常见用法如下:3 ^: W/ f2 i4 S% S2 e2 F
head -n 100 file #显示file的前100行. ?+ D. k! g. L& o5 ^ s
head -n -100 file #显示file的除最后100行以外的内容。
* B; x$ N! u3 T: }0 Y2 }( X显示文本尾部内容--tail
& p6 B! b5 ?5 T- E. R- t S L1 K% d
和head命令类似,只不过tail命令用于读取文本尾部部分内容:% n F" t7 h3 {" u, L) a5 G% Y
tail -100 file #显示file最后100行内容
2 B9 m1 I3 t( H" B- [$ Ftail -n +100 file #从第100行开始显示file内容
$ S4 \* J" S: S- ?1 btail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:3 N- p+ W" ~- d8 Q0 e$ L6 S
tail -f logFile
; U0 j7 X. N. L2 L5 q `对于更新的日志内容,会实时打印到终端上,方面查看实时日志。
9 L1 B& U1 t- m9 m指定顺序显示文本--sort
7 X0 j W% M7 N& h+ ~8 o; J7 n* p$ T! O# Y7 W- H
sort可用于对文本进行排序并显示,默认为字典升序。- N& q) A0 G" X0 {9 w6 t f- c
例如有一段文本test.txt内容如下:( _0 m# w" ?1 D |1 t! r8 ]4 ~
vim' G# K& G4 H* U4 }# b: ]
count3 Z: m" q) T4 [4 `7 u& { [# T7 q
fail" ]6 Y& A& q2 s z8 n. ^% o
help
j4 X! n7 {/ @- bhelp
/ V) B8 i# q- h% y( P- a3 f; ldead9 I! Z' \. `9 a1 a% C
apple! D3 N8 t1 N% j5 L4 D
1.升序显示文本# m- i1 |3 l7 s+ f) \/ T2 k
使用命令:
/ X8 u. w' V* ^2 q: k: Y; d; t6 Lsort test.txt" Y# I7 K& b( F; j
apple* R6 z+ i, Y; C+ a1 E
count; v R- o- I& k/ C( N; G
dead
+ y2 Q b f% g! u( n+ q7 X% Pfail) @9 F. B# \! @8 ~. B6 f
help
+ D" Y' u! Y# t, shelp* y: X7 x; e7 E* y) K7 C
vim: M! x0 d, r, l
文本内容将以升序显示。
9 W) R6 e' _- H2.降序显示! f+ a6 {4 l8 M# V( ?- V! m+ ?" J8 }
相关参数-r:
! \# l- W+ H2 [) }$ bsort -r test.txt( I7 E/ }3 J- Z; K' b8 b3 Z
vim
- f4 h8 D6 \0 I6 Zhelp
- N" e% h/ v! W: Jhelp
6 v8 r8 J2 l) F! |: y8 f' w* T: c3 yfail
8 q- c0 `2 l1 \( G! {dead
2 g& z' |- L/ @1 w, Y O" P* [/ Hcount8 _5 u+ _: h/ O3 U
apple: N8 g+ {5 c8 ^1 v: E$ n
3.去掉重复的行
( N( o1 K! k5 }8 U1 }" Q' M我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
; w7 U% _* x6 D/ Qsort -u test.txt' ^2 Q# R2 o9 ]: n% A! p$ N
apple3 n" e1 {* k9 U: W0 k
count
. t" q7 K. `7 mdead
; z% K7 _! q* i G3 B0 Lfail
' Z0 k& D [9 Vhelp% n, ?0 O; h8 r% s% g
vim
m) v. p: H) w7 e% u, ?* X可以看到help行不再重复显示。9 T m2 o3 F& ]; t U1 A
4.按照数字排序
9 J) \# [) {+ Z4 Q& A* S如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:
" c# |. O& D# {' a) }+ p2 H5 asort -n file
' T% F# O% V- \7 {, G由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
8 @! P, w% l) p# `, l过滤显示文本--sed- y% ]; u! M: H6 O5 ]
5 y* ]2 V. S3 d- vsed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。! R. z9 H' V! [0 S
1.显示匹配关键字行# G, f* g0 k' t8 k
有时候查看日志,可能只需要查看包含某些关键字的日志行:1 n+ `# }3 A, {4 ]
sed -n "/string/p" logFile9 A: _5 j n l
上面的命令表示打印包含string的行。4 `) B; Y8 |8 h5 s# v1 D
2.打印指定行
! U9 g, @" R% Q, g+ y# N! V6 ^3 lsed -n "1,5p" logFile #打印第1到5行& _, I6 R+ R# _2 P% Q$ K
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
' @! |7 \' s' u3 Psed -n "10p" logFIle #打印第10行9 J- S$ b5 [. l' x/ d( o8 w7 k+ ~
去重显示文本--uniq
0 S) Y# T$ C0 {+ U& x% b3 @4 d, N: E$ ?6 J. v$ O
常见用法如下:6 N- l- P" V9 f( }4 Y
uniq file #去除重复的行
" _% D& C* V; ?0 muniq -c file #去除重复的行,并显示重复次数) `! [ Z8 X6 \
uniq -d file #只显示重复的行
0 @ m, T7 ~2 @4 v& {uniq -u file #只显示出现一次的行6 y( n h" S- \2 b" E
uniq -i file #忽略大小写,去除重复的行
; T6 A" C* k! [) j1 e o+ A3 `$ Vuniqe -w 10 file #认为前10个字符相同,即为重复; V/ r" l1 o6 s4 {! \- t
文本编辑查看--vi
, D* D& P T" j+ n f) n4 N3 K
' F( N1 t* \: M/ B2 l查看文件也很简单:
6 V( |( N$ o( E+ M+ h" \+ \vi file& A8 ^9 q$ W+ ^: X3 E( F8 _ U- a6 N
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。2 B, L, K+ Y, u2 x8 V0 }
总结$ u9 S* H, M; B7 |! t
' H$ N2 u7 S. K8 R6 J7 m文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
9 _5 x1 M$ E, [
|