前言7 k! w# v2 V6 j+ z' z
* ]( c! ~, L3 U/ ~Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。# V: y" m: A" }2 B/ D
全文本显示--cat- }; Z* Z s; {% z' _2 Z
3 z% c8 g4 b4 h4 Mcat可能是常用的一个文本查看命令了,使用方法也很简单:" D0 r' N4 L |* v8 D d, M( e
cat file #全文本显示在终端+ t+ {* z4 K6 n: @: u0 z
cat -n file #显示全文本,并显示行号
; O2 f0 \3 W$ h) l) I另外,cat也可用作合并文件:
% m; k9 V7 n" Z! |cat file1 file2 >file3
: E X0 k/ J. Y }. @该命令将file1 file2的内容合并写到file3中。: _) K, X3 x; a- r8 q: r8 @) z
倒序显示全文本--tac7 Y+ A* o* `2 z; c
/ Q" M9 l, N1 e* [/ d0 D- v ]
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。# m3 z$ Z; K8 c0 ^4 d
tac file
& t. X o: J+ ~% p6 u" @, k2 B+ D分页显示文本--more
* o7 [/ I/ T0 J5 ?& N& S- G& D+ E7 Z! D( i: L! j% q$ T+ O
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
4 a* s% P' z4 V9 m9 |$ @5 }2 I1.显示内容
y; C. B: a6 gmore file0 Q% w& `8 H5 ]$ s; p
之后,就可以使用按键来查看文本。常用按键如下:5 F" t# q% @5 U1 W
回车 #向下n行,默认为1行- Y" l+ V1 x L) Q
空格 #向下滚动一屏
8 _7 |4 W) V: db #向上滚动一屏' k) \' t* D) N, F) ~" `/ a+ Q7 _% K0 F
= #输出当前行号
* d4 N: f" G" z5 G7 M:f #输出当前文件名和当前行号
5 ~# o) p8 _7 {4 U; ]& H# qq #退出
" _" v# ]. n5 Z$ e; J& ^2 X2.从指定行开始显示 V, ~2 O" `; y; g' X
more +10 file
' P0 z/ Y- G' N- x( _) f该命令从第10行开始显示file的内容。
1 L& g% v1 i2 b; H2 n0 Y, m3.从匹配的字符串行开始显示
) I1 ]) P# p5 {6 v# I5 Rmore +/string file: h8 s/ }* e8 d1 ^
该命令从有string的行的前两行开始file的内容。. o) c3 q! r" h$ T+ Q' n
任意浏览搜索文本--less1 c. {& g) a" Z+ f- y
: |6 T# m7 z5 K8 }less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。9 K$ S. Z- R% @
常见使用方法:
; ~: [1 R2 \! \8 ], i( A" c# h# D6 b) V# rless file #浏览file
, b: ?0 A) `$ u! ?less -N file #浏览file,并且显示每行的行号
* v6 b2 c/ q$ x( }8 u# {5 tless -m file #浏览file,并显示百分比9 l. j- x0 l2 ^ f$ e
常用按键如下:
9 O# B. p( Y9 d( x$ \1 D* Df #向前滚动一屏( h$ {1 ^& o/ g, o; ?; B
b #向后滚动一屏6 V5 ^5 \" D* B) B6 ^" e
回车或j #向前移动一行
; O' x/ U% i$ G& O' ~& rk #向后移动一行
2 i( W9 [- z! g3 l) tG #移动到最后一行
# l* E% ^! u/ og #移动到第一行
7 d9 R( M! Q: U. c7 z* ?/string #向下搜索string,n查看下一个,N查看上一个结果" Y" d& K! W+ K* k* o. b" A
?string #向上搜索string,n查看下一个,N查看上一个结果 W# [. X# T5 t$ y* }
q #退出
d) Z9 ^4 S4 D* K相比more命令,less命令能够搜索匹配需要的字符串。/ Y% j0 A$ F4 n0 f
另外,less还能在多个文件间切换浏览:, p4 d. Q! P8 E4 j# H7 S7 \
less file1 file2 file3! O0 c& c. K2 J" ~! ^0 |
:n #切换到下一个文件
% T5 X; P6 Q* o/ ]:p #切换到上一个文件
! a( K& f+ X. R9 s1 w:x #切换到第一个文件
( E- B! s _; L5 p4 Q6 L:d #从当前列表移除文件/ k' v4 H: Q$ j. r: s; O
显示文本头部内容--head
% c# y# R$ V$ b+ @& [) S( o3 e
, @8 I& @& H2 z$ {! `& o! C8 Hhead命令的作用就像它的名字一样,用于显示文件的开头部分文本。9 n. L2 r+ O8 p
常见用法如下:) w9 p+ Q; u; `3 b
head -n 100 file #显示file的前100行
; m1 U# s& k7 q: W- w% qhead -n -100 file #显示file的除最后100行以外的内容。
' y% E& G; ^" t& G6 A9 N显示文本尾部内容--tail. l. I( g- s$ O4 u
' t& ?! a; q, [
和head命令类似,只不过tail命令用于读取文本尾部部分内容:% _6 K9 a3 s. N g: E
tail -100 file #显示file最后100行内容
" e4 Y! V5 l3 l" rtail -n +100 file #从第100行开始显示file内容
/ D% E8 z7 g" Rtail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:8 I k! H9 L, j- i$ v! P n
tail -f logFile* I& \8 `* i# ~7 h. p) t' s
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。4 }5 p# N8 u( _/ }4 v; O
指定顺序显示文本--sort
( x" [4 F6 Y H; O1 j: l; K# m8 a' i% [7 _
sort可用于对文本进行排序并显示,默认为字典升序。( N' T3 i! I: [1 G
例如有一段文本test.txt内容如下:
8 S% ] Y5 t7 g3 r: x0 V% v7 q Nvim
6 k/ f( P% @# _" [) P( I" a8 |, Vcount0 m- L0 Z! n+ D: O9 q
fail
! V0 u% l/ ? x/ ?1 S: _8 E9 d0 ~help
$ J8 U9 n% I8 R% V2 }help P5 [, \7 q2 O: j5 D8 \0 f
dead
' n, r* T8 N* t/ h( Q, Dapple
. Y& F1 R0 W S7 |, U3 P1.升序显示文本
8 x `4 X% I5 m- ?9 E' X4 I使用命令:
- a4 H0 K1 w' r+ V& W$ Z r! ]1 ?sort test.txt
7 B# v' i/ D2 ~$ l& `apple
7 @9 V4 e8 ~. H a9 C# j. ecount
3 \2 V. `9 t& N% w6 w( Q& Udead
- I" p/ v( m; [# ]. d( w/ W- E5 {fail
# p4 A0 m5 u! C$ ?7 B0 V) `) ihelp/ q) }9 L4 e' t
help
$ ~2 O5 { i/ Q* Z8 x, L# gvim
* R3 ^8 Y+ y& s9 n文本内容将以升序显示。+ Y! n# a5 x3 j. x) Y5 n. c
2.降序显示1 _) \! P- y7 l
相关参数-r:
: r+ Y! ~+ g/ Y7 J d& ]sort -r test.txt
) E1 ^7 X, R" r' U3 A8 }! Xvim
* U, X9 p+ B i1 c8 jhelp
5 H. s: M: t3 chelp' z% p# s( ~3 N; e% j6 ?
fail
/ n) u. `) o- Y9 `1 R. x$ Kdead3 U% V2 {# X4 s7 d: A
count3 v' S& m& Q9 E' @
apple
& ~6 }7 ]' F2 |5 ?! Z) n3.去掉重复的行
/ c# m( v% m( I& h2 v1 r1 F2 e' e我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:; r# l; U9 L2 {( X# O
sort -u test.txt
! l* S8 W* J+ d! N' Aapple
# D& l3 w' q- f$ ^: W8 f) xcount) [9 D# ^* Z. Z& y) }1 Y, L9 x$ X
dead
( L+ Q$ Z- n, ]. b' Y1 Q. B6 C+ Hfail. ]( h( M% f* @# E. |4 |$ X
help
9 R S# O, M$ L- `3 E5 K( U( Tvim
% \! p3 ?2 L2 {" f/ L0 J Y可以看到help行不再重复显示。
+ V, T* Q) }2 q' c% p( U4.按照数字排序
, c+ A% ^6 T0 s- @8 c9 f如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序: J7 k* C6 @/ p8 m/ L% ^: t- _
sort -n file& Q3 _/ X% j1 Z* I8 s' u$ o& s# e6 x
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
/ ]' V* s( @1 m& _1 p过滤显示文本--sed
2 {+ M9 p4 r! e3 z8 R+ l2 r6 Q3 s2 Z, K# L
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
5 C: _ @6 h- b- ?8 z3 |1.显示匹配关键字行
9 N2 d; D: K/ G3 O# t# ?有时候查看日志,可能只需要查看包含某些关键字的日志行:
; d0 a# j: U7 j5 j* X4 L, ksed -n "/string/p" logFile
2 M/ ~/ O1 `; t' z' z* A( K6 t上面的命令表示打印包含string的行。: x! I3 c# G4 ^* j5 ~
2.打印指定行+ A( I! {8 f$ y0 p+ N0 S
sed -n "1,5p" logFile #打印第1到5行" W: M9 _" Q- D8 d
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
# d6 X7 c1 p/ Jsed -n "10p" logFIle #打印第10行5 q2 D9 b0 l) L1 u4 Y3 b h6 h, |8 I
去重显示文本--uniq
% T0 W. v- W t( u& A5 ~2 E& y5 {& |: y
常见用法如下:$ z( G7 E9 H; U) z
uniq file #去除重复的行' T; s! X1 z, C _1 U+ w7 _; A5 |
uniq -c file #去除重复的行,并显示重复次数, K2 o! x$ {- `* J* S
uniq -d file #只显示重复的行8 \; |* e1 U3 N( l: Z! P. H" g
uniq -u file #只显示出现一次的行/ Y% h) E+ X" o! |! Y7 A9 G
uniq -i file #忽略大小写,去除重复的行 s- a8 ?4 {0 K) M3 y
uniqe -w 10 file #认为前10个字符相同,即为重复* f% x+ \, i# g
文本编辑查看--vi
0 x8 V2 J i8 b9 N1 d# u7 [- U7 s
查看文件也很简单:' T4 v" F# s9 a2 X5 r n
vi file; s3 X3 U8 l- D: C4 H
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。3 b9 Z" m# @+ ?4 ?5 O! P% o
总结
7 {2 W) X/ R9 @. k: r1 A7 T% d, ^( @% {5 }* w! [5 R& I
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。. ~$ |5 ?* Q- R( q1 g( w
|