前言: q* T5 n9 z* }* G" ^9 W9 k: Z
- Z+ D) J2 I* H3 o" h
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。4 a8 \0 t' { R
全文本显示--cat
. W' W9 f N- u
$ O" C; u0 ], k" D2 Q) Z5 x3 ~cat可能是常用的一个文本查看命令了,使用方法也很简单:. [+ P1 Y( n$ O+ H/ o- u2 M! n7 s
cat file #全文本显示在终端
0 E: ^$ r) s4 W" @9 Ucat -n file #显示全文本,并显示行号, i4 d" a, n9 F" r! w7 \
另外,cat也可用作合并文件:: H' g8 a4 E6 t Y) u) V
cat file1 file2 >file3# c" v# F$ Z( a% D- \0 P
该命令将file1 file2的内容合并写到file3中。
$ [" Y6 {. r2 Y, S( Q1 K# @* d& l& J倒序显示全文本--tac/ Y! k) E/ b& T9 R9 }3 w
" f+ D# G& J5 ]2 S& Y! W+ x8 gtac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
8 j6 O! S! D3 h. u0 P# wtac file, U/ r% v6 z# a7 i; c/ y
分页显示文本--more
5 s6 ^2 u' g6 g! x, [0 T1 s/ Q" x/ ?# @6 n% T
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
5 {: O, }: W7 q% I7 s9 @1.显示内容
. y5 H( K# d9 X" Q, Mmore file5 W, A- o- x* c. T* |! P) ^ I' S
之后,就可以使用按键来查看文本。常用按键如下:% M }2 K; `' Y% I7 m/ Q2 \
回车 #向下n行,默认为1行
h# w! \( D: L. r' L% l6 X |空格 #向下滚动一屏4 N# d' \* N. t% |/ @- ~; w
b #向上滚动一屏
( u/ `, ~3 [" U& |: s/ c3 B9 |= #输出当前行号
n! G& L; t2 ]$ W( T:f #输出当前文件名和当前行号
; C6 V- f+ s+ ]0 sq #退出9 y+ _% x/ g4 j, Y
2.从指定行开始显示
, b/ R9 n3 o; ~1 h' H' ~4 C7 dmore +10 file8 o: }2 [4 U \
该命令从第10行开始显示file的内容。
$ F1 h+ k, Q- z+ |$ _! P3.从匹配的字符串行开始显示
. ~7 ~# V" o; j2 jmore +/string file+ r0 G# F6 ]. [
该命令从有string的行的前两行开始file的内容。& y9 F! g1 V4 `% o2 _' h
任意浏览搜索文本--less
7 r( t N# ]% _1 |$ y
5 Z \1 S5 `3 k. j6 {less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。6 {$ C1 [% y& o, v& N( J
常见使用方法:" y3 I% D; |/ X" _; z
less file #浏览file; m; X! f, f6 f) `
less -N file #浏览file,并且显示每行的行号
2 |" k/ `! u2 v: p( k; tless -m file #浏览file,并显示百分比- `7 u( f$ R! W( v+ p
常用按键如下:
! O8 F1 H& ]3 bf #向前滚动一屏
$ P% i# A, _4 ?2 j* pb #向后滚动一屏
. X: z' A( V) S1 e8 o+ w) y, f. [9 \回车或j #向前移动一行
) C# H- P9 h" k) L Xk #向后移动一行3 [! Z; k; T4 i/ I/ x
G #移动到最后一行9 v* P% z1 F+ |% D7 X+ ^+ z1 f
g #移动到第一行1 |; s& y3 @6 r& A: u% L+ L
/string #向下搜索string,n查看下一个,N查看上一个结果3 e. [% ?% i) Z8 i5 _! z; X( }: [
?string #向上搜索string,n查看下一个,N查看上一个结果
/ E( e' g7 U, V0 y3 a9 ~$ xq #退出
+ X4 B6 c6 [6 E2 D# q相比more命令,less命令能够搜索匹配需要的字符串。0 l- x& q* \" S- f1 n* D
另外,less还能在多个文件间切换浏览:
# I) L8 j3 N+ m# {less file1 file2 file3
0 \; m: A/ E$ v: V% Z [5 Y:n #切换到下一个文件
6 O* @+ l- o( v8 A:p #切换到上一个文件
9 w3 R0 o# l- ]9 Q! T:x #切换到第一个文件
$ S. }2 a9 D( N:d #从当前列表移除文件
8 }9 V* {1 a) i, M0 f显示文本头部内容--head
8 r% |, X/ u) E# G# G' o! F3 Z8 F9 h0 m6 h+ W3 ^5 b
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。
2 j. u2 G) U; o/ d; ^) k3 X常见用法如下:
/ Y+ m' n7 c# Chead -n 100 file #显示file的前100行
8 X1 r" w' N4 T; m9 z* T2 L, whead -n -100 file #显示file的除最后100行以外的内容。
6 G( b4 |1 {% g2 v显示文本尾部内容--tail
! l6 i# f' C( g! g m8 W; U( S- G, } O
和head命令类似,只不过tail命令用于读取文本尾部部分内容:6 k& }) B9 i1 U" R" F8 @. V9 }' ^
tail -100 file #显示file最后100行内容
u$ a5 v. N v$ w# Ktail -n +100 file #从第100行开始显示file内容 8 r1 T* n. H( M% Q9 b8 Y
tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:0 _, O( x' z& m& ^& |, {
tail -f logFile
! N. P0 C3 F, i对于更新的日志内容,会实时打印到终端上,方面查看实时日志。# @- b* f" t# C/ r
指定顺序显示文本--sort
- T5 c9 h4 [5 O/ C; C( C) z5 K- I/ z- {: q8 D7 V4 C' f; O& |
sort可用于对文本进行排序并显示,默认为字典升序。
j# d% q1 @6 k. e% m$ A例如有一段文本test.txt内容如下:1 w$ B' x" V' t3 w+ y" V6 z ~
vim& Z( l" g2 ?) s, d; p3 I" I; Z9 Z
count8 s9 g7 m! b4 l# l
fail7 [+ h0 Z3 P% M8 J- a: Q7 L/ s
help
% @8 K# t) u) K( W1 g' ~# qhelp
+ }: D1 b( |' f idead% ~- j. r+ [/ p3 W& d2 S8 e9 l
apple
6 b1 z" T( F, F j. Z7 d% W. L1.升序显示文本
+ m: }2 D* _9 U使用命令:
% N7 ^6 L7 ^6 lsort test.txt/ {- Q. F _0 S$ K
apple
! P0 J1 k: W ]( l8 c6 x0 Vcount K4 r; g7 r+ Z6 ~
dead2 W7 D9 u8 k) w# w) I; B4 @
fail# H/ I" c7 L' o* L5 a
help% }- M' f! O6 f' P: d
help6 L: v" ~/ Z1 d' w2 A! L" p9 X
vim. B7 }/ d2 @- R
文本内容将以升序显示。
& e* A7 A- v) p. A) e" t6 d2.降序显示" V& y- Q0 ]% @" X4 t- B
相关参数-r:
# I; D3 e9 F) h) ^3 U0 \sort -r test.txt# g7 g6 P# C" Y1 T! G
vim8 |6 `4 J$ H2 D! N2 ^
help
: v9 i! F+ q. }5 |: R1 q# w( ]9 rhelp7 ~6 w* y% T9 O$ |/ c# F% U
fail( D m1 P% i# g4 J |! X
dead
9 p# [% J t* I4 Z Z. ]0 f9 mcount0 P6 [/ g9 \7 S$ |
apple
% \' A# |& g9 n4 k$ d3.去掉重复的行
6 `; p. N1 L4 ]我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
/ g% \& v, g4 P. B. ^sort -u test.txt
" N- J1 y4 e* V* p, y9 happle
% }* s; w" X+ d: O0 _: Fcount: x( X1 d2 X& Y6 t4 H
dead
4 o6 ]" K: h0 Ffail4 Q- N9 E4 }0 o8 w4 ]4 K8 c
help9 ^& \' H9 i6 p) R
vim
9 `, ^/ s( W$ k+ ~# f可以看到help行不再重复显示。
A0 d6 i( B" C6 K4.按照数字排序! g: {" ? f! s$ p$ {. B' R9 }3 w
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:8 w! J5 L7 `' L' x1 t! ~4 t7 \
sort -n file
# s1 I7 x/ u, q由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。4 i6 \7 S6 f6 |6 b: T, `( }
过滤显示文本--sed* V5 j5 ~8 _ j3 D% ]+ v' o
' o+ ?1 R3 @6 q9 H0 [1 psed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
* `! t4 \% ]% ?1.显示匹配关键字行
% g R5 ?, [: ]: C5 M有时候查看日志,可能只需要查看包含某些关键字的日志行:3 M, i# |( |6 c) D, ?: R9 g
sed -n "/string/p" logFile
4 m5 D+ e/ H* @上面的命令表示打印包含string的行。
& `& G6 i% E% _) q8 i8 y- g2.打印指定行6 C+ ~# _" {4 B4 J
sed -n "1,5p" logFile #打印第1到5行* y7 t/ \. [0 R9 M6 q
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号+ q7 F# Z7 ]4 W! {* `
sed -n "10p" logFIle #打印第10行
5 X, D7 ~1 f( b去重显示文本--uniq
% y' Q5 j$ G$ c% t" l/ c, `8 Y3 Q% I2 R7 H& a
常见用法如下:& M$ g$ O" r; `& K
uniq file #去除重复的行; i0 x- z# B6 p4 i; k1 r8 r
uniq -c file #去除重复的行,并显示重复次数
" v% v$ r) O" N, I! ? j- i* Muniq -d file #只显示重复的行6 }; A2 G& J& b) U
uniq -u file #只显示出现一次的行
3 o/ N: J, e1 z3 cuniq -i file #忽略大小写,去除重复的行
$ l% h4 V" o* }( @8 i8 t( v* wuniqe -w 10 file #认为前10个字符相同,即为重复3 ^6 U$ C4 Q, x, `# H# G
文本编辑查看--vi
$ E* N9 ]- n5 r6 s8 W9 X' u2 g% _8 Q
查看文件也很简单:: H5 p" G; f1 z+ T: F4 t5 |
vi file
5 r- i p4 E, N! l1 S8 _. f' b# j! k而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
8 \' F% H! [7 ?2 c9 w) B总结3 |! _. O A- f
& ^; C1 g. N3 o8 B文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
; J0 j& J: j9 n0 _4 j$ E, Q
|