前言
4 h/ D3 J0 h& h
3 u# c, c2 G7 G5 OLinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。/ O2 T: Q* P# r8 K" ]
全文本显示--cat3 m6 Z5 X4 u3 b0 W, i
- b0 A% ^& C3 E* |) Ncat可能是常用的一个文本查看命令了,使用方法也很简单:
6 i `- l% s8 y% K, n9 ncat file #全文本显示在终端
; U8 x! D5 Y% N/ [# f/ c m% l& dcat -n file #显示全文本,并显示行号
) c6 o9 _; ], X a0 V3 K另外,cat也可用作合并文件:
4 ~; ^ N. _4 Q1 E6 _0 Fcat file1 file2 >file3$ r: `0 s8 r% w% _3 r
该命令将file1 file2的内容合并写到file3中。: E9 l, [8 [6 e7 q# e% Y9 a
倒序显示全文本--tac# H/ H* J9 d x1 M) N
* u* D7 |/ r F% K7 E1 N
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
a0 i5 x- Y1 B1 v9 X+ m( |9 O7 _( etac file
6 }( S" M) ]0 D7 D" X3 F9 S分页显示文本--more5 g( P2 f9 Y4 m: S
/ F0 L. k, |% @8 D' t( ocat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。$ d% ~$ V: ?4 A, M
1.显示内容) U7 S8 a* v3 F2 q3 \* e/ M
more file5 z H3 G3 b" v3 {3 X" L6 r) z% p
之后,就可以使用按键来查看文本。常用按键如下:
& o0 F# c$ J8 g4 `回车 #向下n行,默认为1行
, O1 L o w' O1 V; ~- Q空格 #向下滚动一屏
; Y. E% E9 W) \. k: f, rb #向上滚动一屏
. c* B m4 ]$ q# z= #输出当前行号
7 Y6 J, T0 e" E: E:f #输出当前文件名和当前行号% f( E; J# t4 |$ d% `5 O z: I2 C) N V
q #退出
5 }8 @8 ~' I! Q1 {3 A6 N2.从指定行开始显示
/ b' f7 y, x3 K( N- Umore +10 file9 q, J" p8 C: x; I# l# u% g
该命令从第10行开始显示file的内容。( `. ~. T* @7 k* y! I
3.从匹配的字符串行开始显示% Y J( R: R) H
more +/string file) F$ e: l. n. B) X# w
该命令从有string的行的前两行开始file的内容。
9 o8 c! ?" ~ G2 H- }- D" C任意浏览搜索文本--less& ]/ O* l% g. W) t0 \! b0 J
' D) j- T# L) a1 v& H
less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
$ J/ [. B! n A( v* c7 P1 W) m$ t常见使用方法:/ p& ~1 ?. D3 E5 y% N" j
less file #浏览file3 `+ E/ m+ l% a& c8 o
less -N file #浏览file,并且显示每行的行号
; x I3 g1 O; E. i, a% ~+ F( Fless -m file #浏览file,并显示百分比
7 u* f+ u. `4 t常用按键如下:
! c7 v8 Y$ m$ C" of #向前滚动一屏/ V. r, `% q Y6 h- g
b #向后滚动一屏
. X! p+ l9 L& h2 F# V! T* n回车或j #向前移动一行
- z: D' l; m9 T' }k #向后移动一行
: U( `! [: U! t s) ^( Y& G" jG #移动到最后一行
8 [8 t- u0 }8 d# n/ pg #移动到第一行
e$ y' i- P' ^+ A% {1 Z/string #向下搜索string,n查看下一个,N查看上一个结果0 Z3 v3 j) z$ e7 k
?string #向上搜索string,n查看下一个,N查看上一个结果
& S# }4 {, ?' N8 \4 P& q0 f* Tq #退出9 R: z. x8 |7 q- K1 J' ^
相比more命令,less命令能够搜索匹配需要的字符串。: d! e4 Q2 j, M3 ~1 j1 O
另外,less还能在多个文件间切换浏览:
7 I7 W0 `! ?( O5 F+ rless file1 file2 file3( k2 m# n* a. q4 \
:n #切换到下一个文件
1 C9 ~/ z# k) J6 A+ q5 b:p #切换到上一个文件
) Q' ]/ n( c* i* V9 q' d:x #切换到第一个文件
! ~! S7 {) z: C! Z:d #从当前列表移除文件 [2 l& {& u5 J1 o
显示文本头部内容--head$ x/ z- O4 j! |" q$ J+ h
% @# U6 w; C8 n* ^, Chead命令的作用就像它的名字一样,用于显示文件的开头部分文本。# }% L: d/ P$ | N4 f
常见用法如下:; n9 ^, s0 I* E( E4 U
head -n 100 file #显示file的前100行* K/ f5 h* g$ O) j
head -n -100 file #显示file的除最后100行以外的内容。
1 j& K: A5 d/ `, ]2 T9 j显示文本尾部内容--tail4 V( D, n% e& z; B% u
$ j) P& x( j% z7 c& |
和head命令类似,只不过tail命令用于读取文本尾部部分内容:& h+ \3 v; w# j/ f& [1 L6 t
tail -100 file #显示file最后100行内容
W6 h& ^9 a* t1 n% Ntail -n +100 file #从第100行开始显示file内容 5 H5 B f9 _/ l+ |" k% u. g2 r& ^
tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
! O# a0 N) L7 q+ G/ m; l! O9 dtail -f logFile
0 y3 r1 b: y1 B. ~' e( p5 Z对于更新的日志内容,会实时打印到终端上,方面查看实时日志。
- L# Y" `# z) w# V6 n5 p! {8 e指定顺序显示文本--sort* o8 a7 M& \+ O% C
- u! o! i2 }9 E$ Z
sort可用于对文本进行排序并显示,默认为字典升序。8 E- C0 _8 v2 p: y/ W2 {' ?: f
例如有一段文本test.txt内容如下:
l2 }: t# k0 yvim ?% F6 a7 X5 w+ h
count a) B: P$ p! }# n2 m! Y& v. q$ W7 u
fail
) V7 s6 t, a) R' ^help3 c: K; o8 X) t$ [& F; [ j
help
+ c1 M3 {) A, N ~1 S3 ^7 q6 A- G# k& Ddead
\' u& I! o9 A! r2 B Dapple
& r( P, u* y$ Q |5 Z- F1.升序显示文本/ k6 j; n- O) \- X* {( G
使用命令:
1 [1 |' K8 C# o: |: I4 Jsort test.txt& P5 @9 P) P7 M4 R, H$ t# S
apple
/ H/ G; m4 ]: ?: V" ~$ Tcount
" _& r7 v+ d! ]% Z( s9 @8 ]7 Vdead
5 {; Z) U8 X& c8 y# f" Efail4 ]' r/ T* l: q% d. {& w: C
help
" V. f/ j! M/ q. A; ?8 Thelp' B$ V+ g! O" A2 H5 _
vim: z u/ [7 Z x) V
文本内容将以升序显示。4 |: U9 r$ P, G, q Z
2.降序显示4 Z& a' P1 G' C, u# Q. L
相关参数-r:
3 C$ j: M, g% U5 y( Y0 D* H$ ^, a/ wsort -r test.txt% _: o8 p$ w0 D/ P3 ^5 D1 c, P; B4 M
vim
0 B; z+ }% w% D7 ]help i' \9 N5 r" ^- z, I
help" c8 R; o" n. f$ o. Q2 F
fail {" V& x" R# w# ~5 C2 r* ~
dead
# t" ]' I" F9 s6 Q% e( x! ncount, {7 p" u% _2 T1 X) B
apple
- Y# o3 u* i& B* A3 D- Y3.去掉重复的行3 T6 m7 K. ? n
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:1 d }9 S8 Z$ e
sort -u test.txt
1 B: L# E; V! \1 A, Sapple
. |7 [: K2 ^5 e9 Ncount' x" x3 P3 i/ ^; s3 u: n3 u
dead5 S/ X6 [5 ]4 c8 q4 o* f% @; q
fail
( a: T, X! U6 `4 D$ i8 A5 u3 x8 shelp0 |7 y4 G- x* x) S& @) g8 o
vim
) a1 X5 s# O! i2 Y0 g# ]" I, c( G可以看到help行不再重复显示。
& T5 z' O7 m8 Z5 \9 ?' G4.按照数字排序$ q& D; }5 K& v
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:$ k/ [& r. i; r& b; t
sort -n file
f; y7 y( Z- ]9 S由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
" k$ H) a) J _/ I# @过滤显示文本--sed6 v6 Z; e. P, l/ z* T% H6 x" o R' V
3 q: M( ]- d4 Osed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
' |. e1 E. C' s8 s! z/ e1.显示匹配关键字行8 |; t0 m( G9 \: P
有时候查看日志,可能只需要查看包含某些关键字的日志行:
6 X# F- }0 V* _* Z- U8 J2 |sed -n "/string/p" logFile
; z) `1 b1 }3 k1 Z6 |上面的命令表示打印包含string的行。* p: ?0 }: t7 X/ P9 A( W1 A
2.打印指定行
" m. h7 ~+ \1 I5 c* `sed -n "1,5p" logFile #打印第1到5行/ l/ @. L: b8 T0 _
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号6 u' {- h& k- S
sed -n "10p" logFIle #打印第10行# ?2 y" n1 T- l% u( E5 s
去重显示文本--uniq, [- @ U |. O. L9 g
1 p! u y; N$ d P% l# t% a4 i
常见用法如下:: s0 ~. g% l% `
uniq file #去除重复的行6 i1 f5 l* h! \+ N# H
uniq -c file #去除重复的行,并显示重复次数
: i4 T1 @! u1 z v. Vuniq -d file #只显示重复的行
2 P; f# e3 ]! q& Iuniq -u file #只显示出现一次的行% V. {, O6 U" ^+ ^# E, y
uniq -i file #忽略大小写,去除重复的行
# V8 K# J6 G; l! o/ I) m$ xuniqe -w 10 file #认为前10个字符相同,即为重复0 r4 w! I, T1 s9 F& ]6 M; H
文本编辑查看--vi
3 j- n! _6 O6 u9 F, i3 }1 c4 K3 O7 }7 k; J* J" u5 f9 u
查看文件也很简单:
5 M6 h, C" l; P5 \7 g2 nvi file6 { ?2 n2 l6 F% ]& q; ?3 Q5 Q
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
/ L* G! q" X, a: S/ C9 J' d总结5 Y2 W1 G4 j, X8 \' ?+ C( | ?
; [1 F" [) o( w文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。- A7 E4 Q+ Y% h5 j- H
|