前言% ?! q F0 B9 ]( }7 ~- A
/ m# Z0 v& }9 D2 B) m8 `7 z
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
9 i. }3 _* a# Y全文本显示--cat
9 ]) S( E* |2 l6 O2 w1 m ?! s$ ^
cat可能是常用的一个文本查看命令了,使用方法也很简单:* q& q/ {8 X3 T& d1 e
cat file #全文本显示在终端8 |3 g n! @. {
cat -n file #显示全文本,并显示行号% P# h# N2 U9 `8 ]2 A# d2 B6 K" U
另外,cat也可用作合并文件:
$ c+ D R2 |* zcat file1 file2 >file3
9 n/ n$ z5 P I% J# ^! B& ~7 ?" r该命令将file1 file2的内容合并写到file3中。6 \. I. k1 {4 e$ `" t% D: l
倒序显示全文本--tac) ]2 Z% l; C. @7 L8 Q1 k
" H+ m* w. a9 s% }
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
% E f5 w N; X' Htac file
8 T+ h6 ^* @6 U4 X1 ^3 _- O% e分页显示文本--more
3 f9 v$ f& l# t
* Q4 y, J: g" scat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。& O8 ~1 Q/ X$ F z+ s
1.显示内容
2 o% Q2 E# D/ Z- |; \: Kmore file* A# `& O4 v- Q% A& H
之后,就可以使用按键来查看文本。常用按键如下:, S" `$ X# |* b! T7 f" ]7 Y/ w) `
回车 #向下n行,默认为1行8 M3 M! j9 E4 i. x& W
空格 #向下滚动一屏 b3 x: g# J% u+ ]* P
b #向上滚动一屏% J, `* @ M# Y; }7 R0 N+ K
= #输出当前行号
[8 S7 @2 w- ?# Z7 J:f #输出当前文件名和当前行号 g$ s/ o1 g3 d# X1 t0 L
q #退出( t w8 F+ f2 v) Y. T
2.从指定行开始显示, d4 A4 r1 Y& N$ x1 r4 G
more +10 file. b8 F \7 N% G9 j1 ]. |
该命令从第10行开始显示file的内容。
0 d8 n& N9 Z `0 w2 p3.从匹配的字符串行开始显示
8 X, i% S4 Y$ @" V! \more +/string file- D" V b. C2 T
该命令从有string的行的前两行开始file的内容。" F! [3 o9 |4 i
任意浏览搜索文本--less
/ I k+ ?2 f8 @4 L
$ p1 n J1 k( u8 {* {& aless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
3 M! A# X% e q9 r常见使用方法:, g: ]+ j& c7 t: D7 l, l
less file #浏览file& h/ b0 W( M/ |
less -N file #浏览file,并且显示每行的行号
7 j3 f" n. {8 u2 Aless -m file #浏览file,并显示百分比; ?& o& [$ }( L/ y; [
常用按键如下:
9 c5 W$ l+ Y( ]3 Z9 Tf #向前滚动一屏. S3 R( P- A; J2 k% u
b #向后滚动一屏( X- D- |5 u4 c: W/ q9 s
回车或j #向前移动一行
7 X6 \* w% d! q; M5 _3 R0 ?k #向后移动一行
6 f9 f8 {$ T/ U4 o% x- p& ^G #移动到最后一行! s2 l5 ^# ^( m: I/ O
g #移动到第一行
& t% }# F* C3 P4 O) K/string #向下搜索string,n查看下一个,N查看上一个结果5 Z6 O7 {* P" G- l* \
?string #向上搜索string,n查看下一个,N查看上一个结果3 u, }1 j5 M3 m0 b
q #退出
: g9 J+ M" o- ~1 c; I相比more命令,less命令能够搜索匹配需要的字符串。9 y0 v# n: Y8 V: G
另外,less还能在多个文件间切换浏览:1 `+ R: h$ f/ z- ?
less file1 file2 file3: U' Y# a) B8 l# ^) N8 C0 G
:n #切换到下一个文件" }( g9 F7 ~( U, k4 I
:p #切换到上一个文件
- D7 F5 b H( B' j:x #切换到第一个文件9 v2 H! _6 l3 n9 @, F4 Q/ H
:d #从当前列表移除文件
4 a6 p" O7 n6 E3 V- V2 z$ M显示文本头部内容--head# n4 W7 k" I- ]. l2 y! v1 e
( I2 N1 T' i, q! X: d
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。
& Z5 W4 _7 e# s7 y7 w. \常见用法如下:
" m( k2 {" ^& h- |' u0 Dhead -n 100 file #显示file的前100行9 k; f4 g3 M( ?2 t/ N. h& i m
head -n -100 file #显示file的除最后100行以外的内容。
8 E8 X0 Q; r+ x5 X* @1 W& q+ w显示文本尾部内容--tail9 A6 v7 S+ J" p" [$ S) \. O
f& c, z, i, I8 N- ~. ?! R" d
和head命令类似,只不过tail命令用于读取文本尾部部分内容:
+ M; ]3 L X- e* h1 o7 }tail -100 file #显示file最后100行内容
( K* Y( U1 [% g0 d9 Ktail -n +100 file #从第100行开始显示file内容
% Q. F' I( c0 ~8 ]5 g/ o) N7 E$ itail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
& [- S( ~' N2 e6 |8 T1 Mtail -f logFile! v: j( e/ O) s/ V! K' |- m. Y$ H
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。
G3 C9 l! k$ \' X指定顺序显示文本--sort
( b8 c0 E% m4 x1 g+ S
+ q1 z3 h6 T3 m* v# ksort可用于对文本进行排序并显示,默认为字典升序。, c" f& B9 T5 H; F2 R t
例如有一段文本test.txt内容如下:
' L; j) E+ p# e$ W( ~ Pvim* R( l6 m1 v- @/ y6 U
count
1 Z/ z9 g$ K& B" L/ f9 Xfail5 x/ ?/ R( L' H( v
help6 l( V% }8 Z1 X/ h# E+ Q* h
help
7 Y5 Z% |% D/ r: q Ndead
1 j& y, I G. X/ p, h% U4 t& Uapple
, z; N5 C3 K; |9 }8 X( |& H1.升序显示文本
M" V- h0 t7 @8 q4 ~" d使用命令:
9 r. B' e( }' u1 Hsort test.txt
* c9 V8 Y" Z2 c) _% b8 @ n; Papple
' f+ p9 V5 C; q( i. I1 R1 ?2 ]# c" Kcount. r/ H2 v6 }) I: ~2 K4 |4 Q
dead
% @" T/ `& ^. T8 h4 F( [& p" Vfail( c+ D9 Z- d" {. K6 F! j
help
& G3 O) n2 S+ {0 a% G$ Chelp
" n, D0 q; H2 r( vvim
: J1 z( v7 e( B: s- @9 y: g, K文本内容将以升序显示。8 l2 d% y" o2 p3 R3 F
2.降序显示
5 l/ U9 W* E4 R3 t% M# ]& w' v相关参数-r:
1 R7 Z2 ^* O# v- Ssort -r test.txt+ a4 v. N0 ~0 W) t# [% q
vim8 _- V" K2 @; T3 r! j
help
5 g0 Y6 F D" B* L: r% p, Z/ ihelp
S6 k& {/ C e# b# Z, Mfail
: B# q' o2 w; g- c* L, bdead$ f% t8 X1 F% B a7 ?; ^
count+ g0 L; t0 c# B s6 j. ~
apple
/ S4 t: t; g# {& j7 U3.去掉重复的行* }* ?7 H2 m* L+ _: V& o5 b4 B
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
, C7 h/ \# g2 f- I0 _* wsort -u test.txt
2 s. `. d1 O, h- s4 @2 {apple
0 }/ M& u+ F. `' C9 S9 p) v ncount b1 F d- t! ^
dead" x3 r2 P3 [2 Q$ B* G7 E% ]7 J
fail
) ]2 n9 ^' Z/ n& K+ Phelp& @: f# M& u: \/ V) ]
vim
5 b# L2 S8 o4 V! S) n2 T2 [! Q h可以看到help行不再重复显示。 N
4.按照数字排序7 j- s* V# N- i( g. c
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:5 I1 D2 B- s8 }( t
sort -n file* g+ _$ x3 ~& O7 s9 [1 ?, j1 [8 h
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
7 Z- U( x# j; t4 @过滤显示文本--sed
2 b; x7 @# H3 P. F, B9 P" ^5 `3 r% Z* x% J/ ~- {
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
# V/ e/ V- h7 ]8 I0 J2 h1.显示匹配关键字行- j( w; {: h4 y$ V0 `% v C
有时候查看日志,可能只需要查看包含某些关键字的日志行:- J$ n; V4 h9 f+ u. c& V2 q
sed -n "/string/p" logFile1 L- q! d" q8 S, K$ A. `( B0 }
上面的命令表示打印包含string的行。: b4 m; J) p5 d2 ?9 A. ~
2.打印指定行
0 R, N, b$ ^) U5 G% u2 @0 ]+ S6 Jsed -n "1,5p" logFile #打印第1到5行
$ J7 \6 M" }2 m) r( msed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号: c Z* {! z- N, x
sed -n "10p" logFIle #打印第10行
, K& o2 U4 x9 m: O$ N去重显示文本--uniq
]" }# R6 N* p: V/ z- w2 E0 z2 |: ~5 k( k7 P* j
常见用法如下:! g1 Y2 h2 W3 @7 W3 b( C: Q* f p
uniq file #去除重复的行
+ e1 P0 @ R7 v0 c: c8 J& {5 Buniq -c file #去除重复的行,并显示重复次数3 `; [$ {0 u) W
uniq -d file #只显示重复的行8 r1 G {; d0 R4 l+ l# ~$ `( i+ l
uniq -u file #只显示出现一次的行* L/ o3 y) [! K, l t. n. e; U
uniq -i file #忽略大小写,去除重复的行- W6 D8 m2 D8 Y9 {) u( s
uniqe -w 10 file #认为前10个字符相同,即为重复
8 ]4 ^$ ?7 `+ u: v+ `文本编辑查看--vi
3 a+ ?9 n" O* H& b
: z! p Z- @4 P9 @7 z. r查看文件也很简单:
) R# ~* C1 Q! _ @7 W, b( z4 gvi file2 h5 N/ U: p3 A% }6 f. R! M4 E# H
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。, o, ^, `3 D x- F) l- B
总结, T/ ^" l. ?8 G; w
$ X6 \" o2 T8 O) x; M9 Q+ R0 H# I0 k
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。- B# u3 F3 r+ ^1 m0 `) w
|