前言( r5 R$ P1 R4 n0 H8 F/ r$ b
6 G! ^/ B# M/ p! E# j* A
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。2 n4 ^. {5 n8 P0 t. O3 c3 @
全文本显示--cat0 g) {2 X& n! B8 O- y! d
# e$ s* W2 R: B2 A; `0 a
cat可能是常用的一个文本查看命令了,使用方法也很简单:
+ }% A4 N9 c5 u J- b" ^# y1 Icat file #全文本显示在终端
, R1 M& |. Z6 e, p& B. Gcat -n file #显示全文本,并显示行号
$ o+ u4 p/ E) X) P) q& C另外,cat也可用作合并文件:
1 l6 x! B, P$ S$ Tcat file1 file2 >file3* c Z8 I" Y7 k% P3 f. i! g' P
该命令将file1 file2的内容合并写到file3中。
% x; K# {2 u4 O倒序显示全文本--tac4 ]; @' s4 y7 {8 R
0 t+ Q% _. r1 V- c0 g$ `
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。. `% I+ {9 V0 O' Q3 h
tac file8 h' Q h' L$ A; |0 Z6 t4 H R3 i
分页显示文本--more/ U6 b0 g3 a9 B
1 m/ U7 H# E$ v: H; Dcat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
) R! b4 e) O# o5 @3 I1.显示内容
$ }- c3 K- B7 D5 n) O( v6 Wmore file
+ O! G% J! ^, N0 p. c! h+ B之后,就可以使用按键来查看文本。常用按键如下:
3 x) I5 q! m5 I* _/ [ V- O回车 #向下n行,默认为1行
( U% R# W) p; t4 N空格 #向下滚动一屏8 I2 Y" Y$ f" h, b
b #向上滚动一屏1 n/ y* V& y8 _7 b
= #输出当前行号% E$ ]! ?+ u) q$ W2 b
:f #输出当前文件名和当前行号5 U& U$ B1 z5 s
q #退出6 `/ h& o- k# y* w4 b) W ?
2.从指定行开始显示' B/ T* _4 R) I T4 n2 i
more +10 file7 k9 @# Y+ y2 { _2 y& D' e3 G" `6 s
该命令从第10行开始显示file的内容。- O2 B/ C+ M5 M6 N- Z
3.从匹配的字符串行开始显示
# J/ n4 O4 G( ]- Y. y' P: Wmore +/string file6 N( K! [/ R. G5 l. v. j9 ?
该命令从有string的行的前两行开始file的内容。
6 f! T- T5 K. L0 e' W- ^! b+ v任意浏览搜索文本--less9 W, |7 k5 W2 r3 S3 H
5 w( O) N, l$ l7 Iless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
h& x. D; G0 A# l常见使用方法:3 }8 {# k' c: |. ]0 X$ r% H+ Q
less file #浏览file
9 q$ I5 x# Z* cless -N file #浏览file,并且显示每行的行号+ _, m. ~8 a* L$ n( J' _3 A" f
less -m file #浏览file,并显示百分比
$ n+ D# g: W6 P% q. f常用按键如下:/ ^/ K) i+ _( U0 {
f #向前滚动一屏) V" A3 N/ k3 I X4 |
b #向后滚动一屏 p2 K) W. ?7 m7 i* O+ R
回车或j #向前移动一行
3 ]5 D5 x" z6 L" d/ p4 Fk #向后移动一行; F2 c( A5 k% s2 D5 o
G #移动到最后一行
# E+ p1 J# n9 ~+ qg #移动到第一行
9 N- I% ?: e) y1 r/string #向下搜索string,n查看下一个,N查看上一个结果7 ?$ P9 ?5 P' q6 l; J9 ?* o( u
?string #向上搜索string,n查看下一个,N查看上一个结果/ [# G! Q7 C5 Z7 _, Y7 ?" u- X
q #退出% X: w6 n8 p- i
相比more命令,less命令能够搜索匹配需要的字符串。
3 K) ~* q& R* X: D6 F0 m% G1 c另外,less还能在多个文件间切换浏览:3 {5 D7 F" }, V- _1 i; t% _& o: I
less file1 file2 file3$ c; {: G+ {3 V4 [3 H
:n #切换到下一个文件
) H& {1 o7 O3 o8 o. K:p #切换到上一个文件
: }& E2 L4 S% S, f' ]:x #切换到第一个文件
/ @0 I" A/ m4 O, {:d #从当前列表移除文件2 Z$ I/ R# t3 Y/ {
显示文本头部内容--head/ p- [: S6 q1 r0 s5 D
|1 F" ~& |% i
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。
! n+ @0 @$ B T" ^/ d5 H常见用法如下:
: s( c; D8 K2 `. @! l% o& I7 khead -n 100 file #显示file的前100行" x0 Q' Y; w) R) x: C+ Z6 j8 |
head -n -100 file #显示file的除最后100行以外的内容。 2 s' c3 E, `! f2 L( b: H
显示文本尾部内容--tail/ T. z2 V2 B+ D* U$ p0 a! q
& G$ k; z. S- I. e7 {- g和head命令类似,只不过tail命令用于读取文本尾部部分内容:/ K. @& q4 i* o3 g" @9 B! V
tail -100 file #显示file最后100行内容4 ?0 \# d9 a) j
tail -n +100 file #从第100行开始显示file内容
n% Y f3 }0 z0 ]0 z* v8 |tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
9 P; ~7 G9 O5 wtail -f logFile6 {6 R# b9 B; I$ c
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。) r8 D, T4 a6 J I$ _! o: A* G) B5 `6 r/ q
指定顺序显示文本--sort
% ]2 Z4 P' ~$ _( w' {. N' p9 G/ C5 o; k; V3 ]5 v
sort可用于对文本进行排序并显示,默认为字典升序。
% w2 O; m2 L4 N/ Q* [例如有一段文本test.txt内容如下:
! {' i2 ?: } D3 g4 S! c+ `vim' Y, |7 n- o& h+ Y+ J
count) V4 B( Y6 L/ A0 F% Y1 o
fail
9 |: o# ~+ z9 P5 jhelp
8 M8 X* _5 x( v6 v- }- h4 lhelp& F r% Y/ H2 O
dead
$ x% j+ d+ U) n w: T& lapple; M, {8 I: X" P; {4 B I
1.升序显示文本* [) s7 F; e2 ^- Z- C$ c
使用命令:
7 O0 ]' X1 x& E I: G7 Usort test.txt
2 B. [% B) Z @3 R3 M/ oapple$ ~% U" L2 x9 f2 ]0 ?7 Q6 Y% T5 [
count
- b0 d6 l. n) Ddead7 A0 O2 W& H% H- \9 T$ j, p
fail4 _" U! v0 L, r* [: D4 H$ p8 C! P
help5 W3 ~) q; Y% t* W$ G
help6 [$ m) T! O+ T. r1 O
vim
' e* O: p, r& D) I/ J文本内容将以升序显示。" R. q/ k( l; q9 x
2.降序显示
& `- K7 Y8 d: H9 [相关参数-r:
% l0 z0 ~2 X. X0 _ csort -r test.txt
9 q" K8 g' r! j6 } rvim7 W8 W: L$ ~5 o0 D
help
" _0 C) Y; ~% H' qhelp: ^* G8 i3 y( d6 ^2 p
fail$ y3 M+ ~+ p6 T+ _. l |+ w! i
dead
; h0 Z& e( Y: ^" M' J- M Ccount
! c q+ P# D) H# H& N5 Rapple9 r$ u! L' F! l2 _9 F
3.去掉重复的行- r8 L# W% F5 p6 v
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
. e: @! \9 e/ n; ^5 |! jsort -u test.txt
! K' m& [' p8 D' Aapple
0 n9 L0 ]8 [; N5 ocount
! V8 n9 J$ p" B1 }( h7 ]dead
/ V1 P$ o0 Z b2 B0 E. H: Dfail* |# W) p( e7 s
help0 P9 g) s/ m, l3 Z- @% m, {7 A: q
vim
& O+ m9 D& K+ ]) U8 t可以看到help行不再重复显示。
% p* B4 {& Z. ?4.按照数字排序
& R/ j9 _1 C% e3 [# O; ]$ Q0 S: Z如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:
' O5 f/ l2 v$ _1 L/ L3 F3 Ksort -n file: _$ |/ z2 C1 `! F! n8 \2 P2 b0 o
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
1 K0 t) J6 Z5 j8 Q/ m/ x; C! D过滤显示文本--sed; K& L/ r# y6 F+ s, h8 {' A! h
, l' ]! h/ b, U3 ~2 p1 G2 osed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。, y5 t( \: R& ~+ }
1.显示匹配关键字行: W1 F, d+ e% P; r Q4 ]: |5 J
有时候查看日志,可能只需要查看包含某些关键字的日志行:
; H' J/ Y. t! F$ s# Msed -n "/string/p" logFile6 Z6 A# T, O3 |7 u' p
上面的命令表示打印包含string的行。
2 {4 ?* ^ v9 g; U2.打印指定行8 t3 Z- Y2 s: C0 v
sed -n "1,5p" logFile #打印第1到5行0 {; z2 b! \+ l6 W
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
0 ]) {$ C( X; O8 Bsed -n "10p" logFIle #打印第10行
$ e s- P) }4 G( `( {0 j2 x去重显示文本--uniq
7 f9 N8 f9 }7 F) E
3 j a9 F B" E- R0 D o常见用法如下:- A' \" e1 a- h" l
uniq file #去除重复的行1 [4 g: G) Z. G2 T: y' \! e6 f2 x
uniq -c file #去除重复的行,并显示重复次数- [& {$ p0 N3 F) [/ B! ^; }
uniq -d file #只显示重复的行" i3 \3 g+ _: c: @! j1 F, P; [
uniq -u file #只显示出现一次的行
3 Z3 |- M+ Z; S/ B( c7 Z; N; Juniq -i file #忽略大小写,去除重复的行" o# V1 a% n# ?1 E9 f
uniqe -w 10 file #认为前10个字符相同,即为重复
6 W4 h9 p4 c, P/ g) ~- @, D文本编辑查看--vi& y7 S+ \. L6 ]9 a c& ^* Y: y
" y% U2 m5 f* U% l( Z查看文件也很简单:
7 E: c" ]5 q: G2 }vi file
3 y0 N% E+ j9 h+ y5 e2 W而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
8 k+ G3 {; w* C- L1 ~ Y7 w M9 V5 m总结2 m3 ?9 m( \ P) i
& a8 g1 e0 d7 X0 d文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。8 K' U1 g m" v! k1 |1 B
|