前言8 r0 _$ [. F! |5 q% G
1 a7 B; Q- h+ Q- c
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
* }. s$ O1 Q& ] E" J5 r全文本显示--cat
, I! e) r- [7 A; P3 f ?5 v' O, O- e+ y- F F; ^; \4 F8 E
cat可能是常用的一个文本查看命令了,使用方法也很简单:+ \# f& ^# p9 |# R' U3 s+ q
cat file #全文本显示在终端
% S# E9 ] h" [, Z+ Y& g/ \cat -n file #显示全文本,并显示行号
, p% x3 i. {8 D6 a1 Y5 a另外,cat也可用作合并文件:# D+ O" }3 [, }
cat file1 file2 >file33 ]0 T: }7 y% M1 I; {: B
该命令将file1 file2的内容合并写到file3中。
7 {) S& [% ~& t Y% V倒序显示全文本--tac) t2 M/ x# H Q9 d, M4 H
- ?: u8 ]$ r, b8 e: b4 ?! B
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
* S4 p$ X/ h5 _" g$ otac file S. y+ }# R; f" }7 u
分页显示文本--more/ Z* b6 ]1 L* K7 R9 r- k
& {1 F6 e& ?/ j; ccat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
+ |! [& r, R: i* c( m/ z; @1.显示内容
; b. P$ @. E9 ^; {! h5 S, H' m4 jmore file) u' {5 @) K! G1 D, k7 i" D
之后,就可以使用按键来查看文本。常用按键如下:
- N7 a3 `/ `3 n回车 #向下n行,默认为1行$ P+ h" z% d0 P$ ]6 g1 U1 _% c
空格 #向下滚动一屏8 J. g' d) H' ?( M* L
b #向上滚动一屏& M$ f. d7 b. `. @( d; n$ E
= #输出当前行号, H2 h( a7 v4 y$ E |
:f #输出当前文件名和当前行号; q% N2 s# Z( B$ D7 z
q #退出
* o, h# ^3 ` w2.从指定行开始显示
; H6 f" R3 \6 y$ Z' _8 F2 umore +10 file
z' y9 c. v6 w& w该命令从第10行开始显示file的内容。
" ^: z! w; @0 F* y; M3 Z3.从匹配的字符串行开始显示; a6 R7 u% l: S4 O! p8 }! G
more +/string file
5 E4 J. o/ M* @- q' R: m# z9 Q该命令从有string的行的前两行开始file的内容。# ^. t" }8 o. f0 I5 l* G- w
任意浏览搜索文本--less
4 H3 m5 |) r; I5 @
& s/ l w. u- b3 Gless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
7 ~: z& k/ o" {7 F: U常见使用方法:% { ] Q( W- i3 O* g: E A
less file #浏览file2 [) ?! P. s6 z& I0 n
less -N file #浏览file,并且显示每行的行号9 t1 q% [5 p* [; X! }
less -m file #浏览file,并显示百分比+ S5 @4 K" R9 C4 l' k) E! n
常用按键如下:2 ~1 \) P7 M! ]) z5 a9 a3 x
f #向前滚动一屏* ^8 d6 D; E7 {* {! v
b #向后滚动一屏8 |0 v4 @7 M% K( k/ g4 O
回车或j #向前移动一行& s$ p+ v& Q2 W) `1 I# S
k #向后移动一行 x+ r# g" k+ }1 P6 n& Y
G #移动到最后一行' ]" A2 ]% R( j) ?3 t8 \9 G0 z8 u2 m
g #移动到第一行6 q4 Q0 S, q/ O# k5 [6 }! D
/string #向下搜索string,n查看下一个,N查看上一个结果
) N \- B; ]$ T?string #向上搜索string,n查看下一个,N查看上一个结果* x! ~/ W" M' F+ u! K' A7 h7 V
q #退出" H- J# v4 y% l3 f
相比more命令,less命令能够搜索匹配需要的字符串。2 I& |0 {; h( z" u* V9 h3 \/ H Z: E
另外,less还能在多个文件间切换浏览:7 P1 \7 B6 R' T0 R; }
less file1 file2 file31 q6 i. w+ T9 ^: ?3 [3 c$ h
:n #切换到下一个文件0 u$ A- U! n0 ^% G- h
:p #切换到上一个文件
; A3 M1 y- D E2 l0 L* A# G! D7 `:x #切换到第一个文件, e3 I" M8 _1 Q, [1 _$ ]
:d #从当前列表移除文件8 l, V6 B8 U+ J
显示文本头部内容--head9 |, S- `; \( t3 A* \1 x4 Z
; X* `( T+ N: l( d$ T5 B: M
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。
( R& y) s4 b( }; h常见用法如下:/ ~' |0 \# x5 q* Y' }
head -n 100 file #显示file的前100行
5 P/ \5 Z! d! h8 T0 P# Bhead -n -100 file #显示file的除最后100行以外的内容。 + ~' X% a1 a3 _3 m( A" M
显示文本尾部内容--tail
% }2 U% _' l/ n3 f* {9 h5 ?6 @# k, I5 y0 y, m$ b* E
和head命令类似,只不过tail命令用于读取文本尾部部分内容:; i! X) ?9 J. N: B, l! x. ]# {' P
tail -100 file #显示file最后100行内容
. h. S; p; V2 G! ~tail -n +100 file #从第100行开始显示file内容 # V8 f, B- K5 S) c) C7 p$ j' Y$ j
tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:) |& S) T+ J/ j! D2 x
tail -f logFile
, d( ^( {9 [/ Z8 `5 n! ]( H对于更新的日志内容,会实时打印到终端上,方面查看实时日志。1 F& Z P, [5 A3 d5 m0 h
指定顺序显示文本--sort! X. @6 } a$ H8 }' `: R8 x
, f g& D) a: E! P
sort可用于对文本进行排序并显示,默认为字典升序。. B" G5 E+ O4 h0 I- I% |8 ^- ~: T
例如有一段文本test.txt内容如下:. q9 r& { R) Y7 {$ D
vim
2 S/ Q" L1 B# o# b9 g* Q: H9 K% \count' B/ J6 H5 U u
fail
8 }( H/ B5 b$ P8 @ Mhelp+ R- x, O( _3 n& q1 a
help! j2 Z+ w- S/ }
dead
6 Z7 i5 [0 T' s' G$ h7 ?apple
$ ~+ y( @( W3 Q$ M1.升序显示文本
/ w; u+ O M6 n; f2 ~1 B8 E使用命令:( Y" x" \$ S; T8 \
sort test.txt
0 t3 \9 V+ N. }4 o( B0 bapple, f+ g3 f. n( p/ k
count& A8 A: V! p; u9 z* ^. q! h
dead
1 L4 Y4 o9 ^9 Wfail
" ~$ T, q, s. }+ S. h0 V1 y" Y Whelp, E/ q& X. \4 v
help
# K( S4 k+ ]5 [3 x) U4 i; zvim
+ q) u( ?! Q3 b8 n文本内容将以升序显示。9 \; j' _; P- a
2.降序显示
. J) ?/ }- E. A* R; P& [5 J相关参数-r:
, ?4 { e5 t: C, ~ F1 Lsort -r test.txt, G5 {+ p5 c! I& A% K
vim. `3 c, S8 {. K1 s
help
. L5 r1 T4 Q9 D3 A7 d1 Xhelp
& V7 m( L3 K: w$ p; jfail; j, @% `9 {" z
dead! l$ _8 g1 B3 s/ y$ ^; j) b
count h$ X0 v5 }& A$ X0 m7 H0 Y
apple
3 g. i5 a* g# c" C4 {; A9 ^3.去掉重复的行
6 I% \+ X2 F! U" A% q我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:! N% ]4 f% U- r1 ~
sort -u test.txt2 W; }% R( i" V$ [! B @* T
apple$ j2 {: T. I$ E) k5 | m$ Z
count5 ^+ Q( N6 f4 a j! k; N' g
dead
6 j# O1 t$ L2 A& Q( sfail! W C) [7 ]' r# \: m- F6 u
help: H( H1 A% H6 m# @: P
vim
5 c3 {7 k1 O* r, g H( b: Z可以看到help行不再重复显示。
+ l; j) s- E2 [9 v4 b& r8 ?6 |4.按照数字排序' d+ ~/ @* ]0 X
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:
0 V% A/ \+ }2 V! X) c. \sort -n file" @; C9 B# T7 ~/ c$ |5 b$ [7 a
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。2 k/ f4 U& Z5 K( x$ P
过滤显示文本--sed
0 q; b+ F1 E& x# M) w$ T" ~! A5 w$ a5 P: ]1 {
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。* v- R# H# L, ^$ w4 q' Z
1.显示匹配关键字行
( G; D1 P2 X1 e8 c3 g2 r9 z& b有时候查看日志,可能只需要查看包含某些关键字的日志行:
Z: j" d* `; N% H) H6 Ksed -n "/string/p" logFile0 a0 a: G0 Q/ l% m
上面的命令表示打印包含string的行。
7 t; F8 v! l# W7 _+ V% {2.打印指定行( V, u. p" R6 o& B% r3 `
sed -n "1,5p" logFile #打印第1到5行- z7 X; p& k1 }- T5 M6 l# }
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
) ]1 z9 o( e7 W5 B( z" W, A6 k* Z0 |sed -n "10p" logFIle #打印第10行4 ^, d1 ^2 e$ n2 m
去重显示文本--uniq
- ] l- Q- s. X( D$ m
$ P! z( s) x5 `* E( f: W2 J常见用法如下:
% l& q: s7 o) Z7 `: C9 |uniq file #去除重复的行
; B9 g0 s/ O& quniq -c file #去除重复的行,并显示重复次数
/ m) f7 s( N/ A9 G& ]! Runiq -d file #只显示重复的行
. }3 B) x7 w! Huniq -u file #只显示出现一次的行
/ k8 E3 k8 M* u$ huniq -i file #忽略大小写,去除重复的行
$ Q* V5 W' s' r5 m1 _, {% ^' i7 Yuniqe -w 10 file #认为前10个字符相同,即为重复% b+ f$ F, D6 Y# Z3 @, _0 j
文本编辑查看--vi
/ ^& A7 l( G, s1 D, R7 x) Z0 l; c- I
查看文件也很简单:' `; N6 @$ @, X! O; C; N- T6 [
vi file
% n# E0 U2 w- ?; Y: B6 j4 S9 }/ }而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
) D1 O3 w+ G }; B/ p9 v W9 F8 \+ }总结6 `, |3 W4 K) `* n
3 Y. j9 k6 e) @/ ?& D4 O% J文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
6 D( U# U$ g/ W& A6 ?& B$ L
|