前言$ h/ ]% C, }! `, S
3 L6 }/ a8 D9 _: Y0 o% NLinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
; \& K3 o& x1 d# u全文本显示--cat4 S% [& w# `' ~" ?
* \: w( q, K2 b- W7 u& A! u
cat可能是常用的一个文本查看命令了,使用方法也很简单:
' Z. b j# ~+ S" \( z7 u- J# gcat file #全文本显示在终端: D2 }5 T/ o# J2 ]( M! m! c( V
cat -n file #显示全文本,并显示行号. H' X1 E" t) k* k* A' P( u
另外,cat也可用作合并文件:
& u& m: a- q& ecat file1 file2 >file38 o J6 H/ z* V3 m# x
该命令将file1 file2的内容合并写到file3中。
9 T, \- R# x7 p' `倒序显示全文本--tac
3 l: v" u2 A( T: ~' B* ?) k* I2 G: x6 Z! Q
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。3 Z1 Q3 n0 {1 m5 M x8 U/ B; c
tac file
5 t. ^: M- ?/ m3 R( \$ T" h5 f分页显示文本--more
5 x! X/ F$ @) M: l3 [
2 _0 p# |: a+ d8 A/ w; d" o! _9 Ycat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
' v3 I8 m9 n' ]4 V6 U5 Z1.显示内容
; S6 v& m# e: V& wmore file1 e( ?" f' R& r& S
之后,就可以使用按键来查看文本。常用按键如下:2 ^9 T% p+ n$ J/ y
回车 #向下n行,默认为1行
1 N2 Y9 {3 d3 ~- y空格 #向下滚动一屏" z5 I) L" m3 l
b #向上滚动一屏
) Y0 u& J& O/ V) r" M: C= #输出当前行号
8 @" T" S& F$ J:f #输出当前文件名和当前行号1 q0 b, w; J) V' n) k+ l
q #退出4 t( n6 L) t& V+ _( d/ `/ y7 d# K5 k
2.从指定行开始显示7 R; [4 f0 ]( W' t8 @- x- \) [7 \
more +10 file- ]; L V, m" X( I
该命令从第10行开始显示file的内容。7 Y: W$ y: v( _% g b% W; H2 y% n
3.从匹配的字符串行开始显示7 u3 g, h- a7 q8 p' S+ G
more +/string file) G5 ?! M+ C* S$ } g8 w3 ~ w
该命令从有string的行的前两行开始file的内容。. w. K7 }& i1 w4 V
任意浏览搜索文本--less
* {3 P8 X9 c" t+ n3 Q
$ M2 C; {( s1 I! x, s9 G6 a2 Dless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。* D) f6 ] X3 n/ N% H! b4 M
常见使用方法:
5 s( G- [4 Q- _* |1 N8 |( Jless file #浏览file
( q+ [* d- B9 M$ S" W% ~* D6 Kless -N file #浏览file,并且显示每行的行号
) z* K9 C- V* _( Z. A! gless -m file #浏览file,并显示百分比
1 D0 ~6 r, k) `5 ]常用按键如下:# G4 r- H& O8 ~$ `2 N; c0 `
f #向前滚动一屏: b: G" t8 W1 r
b #向后滚动一屏
* T: ]& h; k2 ?' N; E1 I回车或j #向前移动一行
) U' |$ W+ j3 g) I3 U2 W) wk #向后移动一行2 s7 z2 N P' f8 e( D2 r
G #移动到最后一行
) k+ [4 [% C ag #移动到第一行
% l/ {0 M6 `) {* r o2 |" u$ X( T/string #向下搜索string,n查看下一个,N查看上一个结果' p0 |9 Z% t) U9 ]( l# F# a
?string #向上搜索string,n查看下一个,N查看上一个结果. C) h/ E6 p1 W; M5 |
q #退出
" B/ ~ S5 I4 @7 O, M# d相比more命令,less命令能够搜索匹配需要的字符串。& M) d* _8 h, l& O( V8 [" F5 _3 k
另外,less还能在多个文件间切换浏览:
, J y( N3 f$ L% J& Y3 C+ Oless file1 file2 file3; k% M( X1 A# p2 ]; _( B
:n #切换到下一个文件+ ~9 q( T1 M2 T1 Q. U
:p #切换到上一个文件% }( f/ m. [4 G' I. v' f1 o9 ~ c
:x #切换到第一个文件, i+ Q8 R/ e2 S, B
:d #从当前列表移除文件$ s# I# q# L, O& T# F9 I
显示文本头部内容--head
7 k9 A2 |; }1 r* r' I# O* j
, ~) Q' H$ S$ A' O2 n- Ghead命令的作用就像它的名字一样,用于显示文件的开头部分文本。
3 g0 |8 Q* Q. i; i常见用法如下:
8 d# W% a6 E1 t5 khead -n 100 file #显示file的前100行
4 W9 J7 T6 z2 g* H9 s5 ehead -n -100 file #显示file的除最后100行以外的内容。
% C M! y: A; ^* w- ]/ Y/ S显示文本尾部内容--tail- r6 P- M; v4 M
/ s: |" c' C' O1 E. D- U和head命令类似,只不过tail命令用于读取文本尾部部分内容:
6 i9 a! P* L. ^5 v4 [# etail -100 file #显示file最后100行内容
+ a$ T9 W: c0 S8 H) U& G5 \tail -n +100 file #从第100行开始显示file内容 / a! O2 A: q! |6 H
tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
% _1 I3 R" K' \+ n T5 s* K9 ]tail -f logFile
6 G9 y+ u# z! w2 ]对于更新的日志内容,会实时打印到终端上,方面查看实时日志。1 E4 V" x# G8 v0 c# w
指定顺序显示文本--sort$ j7 g" J( T+ A2 h/ I$ i
6 F* n: }8 |4 h1 g4 K; F K
sort可用于对文本进行排序并显示,默认为字典升序。
; {) i4 y5 |- R) h* l6 ?3 G: y例如有一段文本test.txt内容如下:
5 I% E% B& l" O9 Z+ T6 ~vim
; s5 C: A! i% _8 f! ucount
& g. P: W8 b$ n$ u9 gfail' s7 |9 g7 p! ^( M
help# [) l, _6 Q( L C1 c) j
help* H, a, Y9 \# w E% k: Q
dead
7 m' n' o8 c7 f6 V& m; ^+ kapple/ d% H3 W7 n7 [5 [% B& C
1.升序显示文本
: j' V7 [ a3 K& P使用命令:( l6 j" P/ ?; k
sort test.txt
. H' {4 Z$ _2 _# L$ s$ x( {# zapple
+ L; v- s5 C0 Y# e. Wcount( k& ~$ E& M# h4 @! i5 F
dead9 T% z5 B, [& C
fail+ M3 j1 Q8 D6 V8 ~! _
help4 x" {# S; Z4 L( L
help
' I# E4 `% E- ]5 O' P* [vim/ B* @, w8 R8 D/ N
文本内容将以升序显示。
7 X: j! f5 x1 B* }$ M2.降序显示* k, U# W' N) L$ H0 q
相关参数-r:7 `0 M8 {0 n# i$ _% k$ }2 A
sort -r test.txt
% D* g1 F! i8 |* z5 vvim
5 P. p3 Y- S" v2 r- ?help% l$ `. n* \/ c, P1 p k0 m
help
1 X2 F' ]+ J: m6 Pfail8 s8 \+ b$ {) X# U6 Q+ w
dead* J! h- [$ c9 [, H
count9 X0 d+ H# V/ |6 I0 K, |/ B, E* b+ J
apple- h" }& T* o" N5 A5 u$ T
3.去掉重复的行) P8 @. Q' {. ~3 o0 A- h3 ]" p6 p
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:; H) k5 Z$ i/ T0 ?) q4 M" L& X* K) n, l
sort -u test.txt. \ |$ P2 f9 p1 c0 }; y6 u* D: c
apple
1 w. }. @+ O9 Kcount5 G( F x$ H9 w1 ^# U
dead0 b# A1 X/ A, j5 _% U8 s( A
fail1 B5 o! W$ l3 N' u/ g% N _! K
help
! g6 o9 E4 h( _6 \( ?1 cvim8 U$ j" i: |/ @0 I0 I+ e- E
可以看到help行不再重复显示。
8 d% X% g! F( O. k ]) i4.按照数字排序
( |, ?4 g; |; q. Z# n2 Q如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:
$ I$ F4 e- Z4 F9 v* J' rsort -n file
1 K w5 F0 K& ?由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。! d1 Y0 y. u' ^
过滤显示文本--sed: z$ q: ]$ z7 ^8 c! ~5 r
: P* T i6 f6 n# P9 f2 V
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。# P/ t1 ~/ b& o1 K
1.显示匹配关键字行( N2 C1 a% G1 g. k4 ]* V! e
有时候查看日志,可能只需要查看包含某些关键字的日志行:
+ y' L$ [+ i" q$ n. csed -n "/string/p" logFile' X! x+ |7 ^4 e' ]7 o/ H$ Z
上面的命令表示打印包含string的行。
l! B9 k& F9 z8 d0 p0 ~. D2.打印指定行 ?# O0 [, U# d( ^8 k5 q; t
sed -n "1,5p" logFile #打印第1到5行; d. W7 W8 O9 T
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号6 G* u# ^8 `6 _. m
sed -n "10p" logFIle #打印第10行
) {! ~' Q/ ~+ r" x; x, {去重显示文本--uniq
) a. {# ]% g% `, R9 b# o$ e
0 \( Q' o2 a+ E常见用法如下:
6 Z* ?6 m7 R ~# U0 J# M/ H/ [) g& A& kuniq file #去除重复的行& M; M! U$ f( L& j4 y0 D3 L* w
uniq -c file #去除重复的行,并显示重复次数
8 f, O) Z+ H- x% Euniq -d file #只显示重复的行
1 M! x: j. l" P. @6 Y& k. Iuniq -u file #只显示出现一次的行
5 N! ^% N0 c( N2 }5 L5 v. \uniq -i file #忽略大小写,去除重复的行* n7 M5 s2 h! L& R- S
uniqe -w 10 file #认为前10个字符相同,即为重复
1 S' l9 e3 m- v: ~文本编辑查看--vi$ R! B0 W6 Q7 |; C! }' m
+ c5 a$ D9 V; F* M
查看文件也很简单:+ l+ f' P3 j/ O' g V0 y
vi file" T7 J; ?! v% e) G: l
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
9 t0 {# ~' X+ R2 ?: H1 c6 ]. b. X总结
3 v K: L+ U' [' j8 \* ^; i. L& @3 ]( ^2 g/ O9 a& y
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
; l* `$ V8 \( e
|