前言
' J+ Z5 H: [ `. }; ]$ L, F$ s2 M# Q% f! r. ~6 y
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
' ~. ^, E1 a2 s9 f. [全文本显示--cat
% ~* H- A+ _% ~, O$ ~! m$ ]; b6 i! @; S4 H# {) K' ]. W0 A& c
cat可能是常用的一个文本查看命令了,使用方法也很简单:4 s1 Z, A1 H; f4 H/ P
cat file #全文本显示在终端1 Z% M3 x* I4 M7 x' K6 N
cat -n file #显示全文本,并显示行号2 T& J/ K9 s$ |
另外,cat也可用作合并文件: o+ \9 f+ [& `3 F
cat file1 file2 >file3
: T# P4 i5 V2 K5 t1 a5 t( h2 r该命令将file1 file2的内容合并写到file3中。( L/ A0 Z: I' D6 u
倒序显示全文本--tac K+ z/ c4 h7 U |! R
4 i1 ?+ n8 n, k6 F& ?9 \. ftac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
5 L0 ]! x* q4 @2 \8 jtac file
9 j9 T/ P M0 W7 @! c$ P, `分页显示文本--more
1 G* p5 C" Y; ?( @( ?
- b: e. g$ q6 ~! X: O: G, F% acat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。* {( o9 Q& q+ J0 K
1.显示内容
$ p4 ?- V o5 |1 amore file! o, H ]" @8 n# q$ X i3 M
之后,就可以使用按键来查看文本。常用按键如下:, O* X: F5 l( C* o
回车 #向下n行,默认为1行- X6 g' @' A3 l; o! F
空格 #向下滚动一屏3 w+ S; T% K) G% g/ D& O }
b #向上滚动一屏
+ ?+ R) v A- r! e/ {: S= #输出当前行号
2 @- H. A8 |0 X7 c% b:f #输出当前文件名和当前行号( D2 z8 W% T& ?7 y, V9 M% u3 ]4 f
q #退出! M: T) e! H3 y2 u2 p! L; @8 }
2.从指定行开始显示! g% H4 M; V% O
more +10 file
1 ^& u8 z" w9 ~; F; S' d该命令从第10行开始显示file的内容。
k0 C" _4 u% y3 [) n; A+ I3.从匹配的字符串行开始显示$ W0 \, m8 U6 ]5 F
more +/string file
F+ ^7 v) o9 E% C2 b9 r* m! ~该命令从有string的行的前两行开始file的内容。! N% i% j. s; Q2 ^: h* @6 g
任意浏览搜索文本--less/ s2 ], W" o, a3 A1 L$ e
6 ?5 \' k2 X* [less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。# ^- d2 ~2 @3 c8 |4 K: i
常见使用方法:4 S4 T( ]& P) y$ K
less file #浏览file
8 E p C5 \5 n6 L' ^" y0 _1 Y6 Sless -N file #浏览file,并且显示每行的行号
9 g8 x1 g' x* Q# Tless -m file #浏览file,并显示百分比
( [! u0 F1 j. h! C常用按键如下:
4 l. f f4 B+ a3 j/ z) ]: Ff #向前滚动一屏2 Y6 }' ~2 v; O8 I
b #向后滚动一屏
8 W& f% L0 H0 I+ R4 `6 f回车或j #向前移动一行
: E. u% t* L' p. i4 Ck #向后移动一行
F ] a, |6 z7 ], ~" V( uG #移动到最后一行9 R1 \% R' t/ t7 Y) S4 u
g #移动到第一行
7 a7 y$ t" O" U3 Y/string #向下搜索string,n查看下一个,N查看上一个结果, z. f) a% ^7 R3 |( y+ ?- T' ]
?string #向上搜索string,n查看下一个,N查看上一个结果% b, I! e% U8 r+ V* F6 ^- a \
q #退出! X& O/ ?4 N7 E, u% R0 f
相比more命令,less命令能够搜索匹配需要的字符串。
: D" _* s: e8 C, N; i5 n另外,less还能在多个文件间切换浏览:
* G W" Q' a. I$ kless file1 file2 file3
. O1 e- w( A* T1 [( n- a1 G:n #切换到下一个文件: M, q) e' u5 x8 R$ Q! `. m
:p #切换到上一个文件" S0 U, I$ Y2 f7 r/ {5 g w4 m* u* o9 f
:x #切换到第一个文件
+ A9 l8 {% O4 O- R/ _ y% S# }:d #从当前列表移除文件
# U8 U2 [# b# k$ x# n显示文本头部内容--head' |+ O& Z7 J: j
* l. U% Y' v( }, b: _
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。( S4 C& m" }! M* j* a$ g
常见用法如下:
0 g9 v) T+ p; a; r% V& O8 E- m( ghead -n 100 file #显示file的前100行
; f$ F; Q! I( V8 \* w! Rhead -n -100 file #显示file的除最后100行以外的内容。
! k, D4 i- M+ C7 J显示文本尾部内容--tail
; Q- O8 _! z. [% U$ j( j, P& M* V
* o6 e3 [- ]8 j和head命令类似,只不过tail命令用于读取文本尾部部分内容:, i0 ]# ?9 u. t! y. \2 `
tail -100 file #显示file最后100行内容
6 ?& j- E2 ^/ r& M2 X b q, |tail -n +100 file #从第100行开始显示file内容
# @( `9 @$ e* \1 `" j. Mtail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:$ r1 g0 y4 E# Y. n$ i
tail -f logFile4 W& z0 }- T$ J! Z$ {$ l8 S
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。7 s: Z" G$ a) P. Q& W3 o( j
指定顺序显示文本--sort( I5 k$ f2 q' s/ H8 F3 W$ l2 O# V
, x/ `7 t' U2 ^ J
sort可用于对文本进行排序并显示,默认为字典升序。
z8 |& {* E8 a1 H6 ^! U例如有一段文本test.txt内容如下:
+ g w. ~- o; ^1 Z: O# uvim/ N; x: |" ? K# g, X( a
count
# ~9 ~6 C7 M5 i: E2 l2 ufail! h _' O* G, `2 X6 F2 q* t. p
help
( ~. x' b1 H6 L& ]7 p7 Xhelp% W2 }; D. _9 Y2 ~: E
dead
6 l) j5 D& l( c! ?! s+ _# `apple
) w f; S/ U2 \" E1.升序显示文本
7 V8 l/ }1 g7 z% Q使用命令:5 q6 x) K( w; W | p0 K; e
sort test.txt) j4 C2 w& s4 l% E; i
apple
) F5 g) E" o0 |3 ], ^1 G& Rcount
! C% l& c0 a$ |dead4 u" z0 a( r+ O2 i6 Z
fail5 D6 v2 n. B( z+ g$ X, F
help$ i$ P" ^6 J" i0 o6 a
help
" @2 Y( E' J8 v# a$ Y% dvim$ b2 q0 d0 |2 _' ?8 J+ J
文本内容将以升序显示。; Q9 F& R4 M7 h( l% D- V9 {: o
2.降序显示
U- f' p; b! K1 j6 V. m! m相关参数-r:
6 \9 N+ k6 {( A5 |3 w/ Rsort -r test.txt
' C J$ {7 p% { Wvim$ P6 z5 f! p" S% H8 q/ w
help
+ S2 g2 \% e1 m7 d3 @5 |3 F' fhelp
' S$ G$ S: a( h/ ^' |3 _fail
- c0 f' r& k( {" T$ y4 Ndead3 @2 L* y$ F/ g& Z8 T* M
count
0 `* d: u( ^( j+ i4 R, q' j) eapple
/ N$ ?5 ]- ~* R3.去掉重复的行
% G' o# }0 m3 H& g我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
4 s; M4 A7 m/ a7 Qsort -u test.txt* H" _1 d U0 i0 }
apple. h+ O9 m9 O1 }- Q* i& u6 V( C% ~
count$ T* A7 n' I" M7 c S2 m" B- i
dead
7 A# T; L, D- @fail" F1 u) G8 [" D; W; |* ?
help
5 L3 m, t5 z5 x5 j9 h" V3 ~, I7 lvim
& \' |) u$ @# K: B5 Y9 n' L可以看到help行不再重复显示。4 y/ o3 r4 L. X7 T9 L! i+ [# V+ M1 D
4.按照数字排序$ J$ [3 |+ C x: j4 m. C4 B7 S
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:7 G7 j- @+ c/ G/ d1 K
sort -n file
" f8 Y' W: I2 z$ _1 b由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。) A D/ w4 e- G( [/ w3 b
过滤显示文本--sed7 t/ s9 Q" Z+ h
; s2 v1 V, M/ N t! d, A, I7 ?sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。1 D4 L( @- E/ D; |7 n
1.显示匹配关键字行8 U6 B8 t5 r/ t. R9 a8 _; A
有时候查看日志,可能只需要查看包含某些关键字的日志行:# A. A" \2 ]/ ~
sed -n "/string/p" logFile2 H( E7 @: m( p% J
上面的命令表示打印包含string的行。$ d9 @3 {" J' r3 S0 q6 L# }
2.打印指定行
; p" Q) ^# x( A. D! Tsed -n "1,5p" logFile #打印第1到5行3 G1 }/ Y6 {1 t# B! q
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号3 r1 Q0 E% s/ k6 W- N& C
sed -n "10p" logFIle #打印第10行
. {9 {( S2 O5 |" N去重显示文本--uniq* c. E7 o; |- G+ f
~$ c: Z( A+ }0 E' M常见用法如下:7 ^% p ^6 \* }6 \* a3 |5 ~
uniq file #去除重复的行' c+ K& D# e* I4 F" z( Z
uniq -c file #去除重复的行,并显示重复次数
+ A. P# w0 P6 z( } muniq -d file #只显示重复的行) Y" v. Q! P& l5 \
uniq -u file #只显示出现一次的行
2 e. ?! u8 T5 h# m$ n3 x& ouniq -i file #忽略大小写,去除重复的行# H _+ b* T, L6 Y* d9 v) m: l
uniqe -w 10 file #认为前10个字符相同,即为重复9 m* X' H7 T) B* _: C3 ]
文本编辑查看--vi" H+ n% k/ G9 T- m; O
1 \# K% k+ `9 v# M3 q. G3 E
查看文件也很简单:
2 v! K! J& Y! \8 [: E, @vi file
5 V8 m/ w5 r) W% J: R" s而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
( @2 V2 v, v. G- H总结# w, f) U7 K P( k& H* G
0 Q2 d- N/ ?5 ]+ c% [文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
8 q- o. u" j* s2 l/ A
|