前言
7 V6 v0 E& b" B' b& t G }7 Y5 ~, Q" w8 \
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。6 i3 P- I, O0 U8 D
全文本显示--cat+ w+ y0 H, f: Z! R6 j% j
6 t% H+ H1 h' c; O4 W. O# H) \* @cat可能是常用的一个文本查看命令了,使用方法也很简单:; [9 @& }3 e6 X0 Q; m/ f$ z
cat file #全文本显示在终端! u- D, E2 V( t L; s! B
cat -n file #显示全文本,并显示行号+ e" ?0 N* V B( x9 W% g# U
另外,cat也可用作合并文件:) J: L! n) G4 @" v1 g' J, B H
cat file1 file2 >file3* Q; {! E* M+ S
该命令将file1 file2的内容合并写到file3中。2 B1 s0 ]. z7 w
倒序显示全文本--tac# ^* ~- A7 f( s! G- \% Z0 d# F; v
* ~+ ~) b7 h$ D5 ]3 ?, v- e9 z Ytac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。/ J1 G1 c/ [/ k0 R$ t
tac file+ H# u: Q' \8 C: n( r* W) n
分页显示文本--more; O7 d+ a8 R8 l% ]1 P2 r
: `4 p, d3 ~3 l9 u, M
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
% Z1 J5 ~& h6 v, s1.显示内容# R6 g [( r0 p
more file
$ ^! O/ J8 Z7 c- I之后,就可以使用按键来查看文本。常用按键如下:
2 H% l. ?# Z2 @+ A: a回车 #向下n行,默认为1行
/ E0 |8 P- A" c: u1 v5 J空格 #向下滚动一屏
' q1 p6 D1 @* S+ vb #向上滚动一屏5 @; A6 k& @7 p- W* [( H. w% H. b
= #输出当前行号
7 j1 w7 d; O* g1 y:f #输出当前文件名和当前行号; @" d0 _) Z' q( B1 R8 u; J4 H
q #退出2 D$ I. h% |* b. f- |
2.从指定行开始显示
/ U! g& o# h+ @; c" h8 V; ?! ^$ {more +10 file2 u( d7 Y7 m6 i* k5 G6 Y2 @* l% F
该命令从第10行开始显示file的内容。; p- W5 b R3 U/ R' Q" k
3.从匹配的字符串行开始显示
1 S! y& M6 o. s/ \; O1 W# Smore +/string file; _' i. o M- k
该命令从有string的行的前两行开始file的内容。8 z# t# p& V. l- i, p
任意浏览搜索文本--less
! s# Z- R4 \& _0 q+ s9 d3 c! O) {# k4 c* U2 k" h4 U) m9 t$ D7 C/ T
less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
* K. H; T) ^8 ?4 V常见使用方法:
/ }% h, n# ]9 q# t& Vless file #浏览file
+ o# d- ]( R' d4 x; V+ Z1 Eless -N file #浏览file,并且显示每行的行号 ~# J+ S" z; i$ k
less -m file #浏览file,并显示百分比
9 ?( H' z+ P+ y7 j" x# `6 o, X常用按键如下:
) y" O/ }' t6 z$ F: b Yf #向前滚动一屏
& R4 u! K* S9 n' h% a: ob #向后滚动一屏
0 D' s) x; N1 G7 A8 y0 `/ e! @回车或j #向前移动一行
' A8 d# U* h- B. Z* g& Tk #向后移动一行, v" Y# [6 l {7 C
G #移动到最后一行
. J7 D! U/ B, k/ {) b4 Gg #移动到第一行
; s( t/ \, a1 E8 n/string #向下搜索string,n查看下一个,N查看上一个结果
9 @! a) [9 ]3 P: J B+ [5 H3 ^?string #向上搜索string,n查看下一个,N查看上一个结果0 p1 A0 ~& t" M! n
q #退出
; H% w, J$ f& _0 |, ~相比more命令,less命令能够搜索匹配需要的字符串。& v& u; F* D; G+ n
另外,less还能在多个文件间切换浏览:
5 J( X! `$ \# c [- u3 cless file1 file2 file3
8 L0 M! l' z) ?3 a( K" ?:n #切换到下一个文件! \& T. E3 P: Y: M
:p #切换到上一个文件
/ ^8 g1 s8 a, T$ k:x #切换到第一个文件5 _. C) S1 s7 x U
:d #从当前列表移除文件
$ h) Y' W( p2 P显示文本头部内容--head0 t! K5 P- Q4 \' `8 X# o
! H0 o, b/ @) l- c/ `head命令的作用就像它的名字一样,用于显示文件的开头部分文本。
/ r5 F' X' V4 z9 r7 a& C常见用法如下:
7 X8 X2 N$ j$ R) e& [ y$ b) t& ohead -n 100 file #显示file的前100行! s; N, m! o5 r/ }4 U9 q1 A
head -n -100 file #显示file的除最后100行以外的内容。
$ |& v/ M0 w0 i显示文本尾部内容--tail
4 s6 D7 B7 W: \" r3 ?
) X& Z# S# D; U+ n D& E和head命令类似,只不过tail命令用于读取文本尾部部分内容:) b& V* }8 I+ L# x9 \3 k Q
tail -100 file #显示file最后100行内容
5 H5 w' u9 P- {; G* A Ltail -n +100 file #从第100行开始显示file内容
, y; ~$ S1 t; @7 M6 |tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
7 w( ], h; b8 t: V/ ~8 n& d! C' H/ `+ Wtail -f logFile4 ~+ i0 N2 R5 ]1 l) O0 r
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。6 F! l1 N* t" z1 l4 Q
指定顺序显示文本--sort: Y9 c( e* v$ C6 }. I
# F, k" _+ F$ T; {sort可用于对文本进行排序并显示,默认为字典升序。
) e" M- t" o' Z3 k9 h) o例如有一段文本test.txt内容如下:& U- n# c5 S3 c' ^
vim
' }/ g1 P K0 E$ C& e( {count
2 n9 u+ @5 u9 O6 u* Kfail7 C% Y+ T% A: N4 \+ l1 D0 p1 D( ]
help
7 [6 ~6 F# P9 dhelp
$ T( D: t4 A. p9 k- \7 U3 wdead
$ H' F9 w% Y& S+ i; g* lapple$ C3 T6 v0 n9 Z) G
1.升序显示文本- x/ i9 @4 i; b' u" ?
使用命令:& Z! M0 j7 D# a' u4 w, g, k1 t
sort test.txt
' j. t. Y2 h6 m) h/ M) E- h& japple" P' g: X+ @# L) B. [& \8 |' f
count
0 V: e. f. {8 \5 ydead E2 X, j2 J0 `3 l
fail# v+ G" `! Q* y W: M* L8 A
help
: `4 p i8 ~, vhelp
2 W+ |9 K. _: S- O6 Q$ dvim" i- n, t1 |' a6 A2 l3 I3 h3 n I
文本内容将以升序显示。6 R: X) \6 f" M1 X' u/ a4 s
2.降序显示
4 j/ _( z+ t. _# h: h( J相关参数-r:
$ E. L7 ?- J8 E% T2 [- ^sort -r test.txt
% t* V; V3 V1 C/ C% O# [/ L& ovim
# R- W( s; {6 x+ l% s$ D$ q. xhelp
- N( O1 M5 g6 |. Ihelp% a, }2 k( H8 q6 F" J
fail2 g$ t& h! J9 [+ [ o0 w
dead
4 f" \1 O D R- Ccount' V) A/ w4 C1 [( k
apple' I4 R/ q0 P/ b2 y2 s
3.去掉重复的行* T: A5 x5 l, i9 N* j1 d) J
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:) m" O" m$ X* q+ r/ ~: ~
sort -u test.txt- v1 p% P3 \0 n/ i- a3 [
apple
5 U/ f& @: ?0 Kcount4 p% S2 A3 ^0 \2 a
dead3 O+ {/ Q5 i, ^5 x. [5 J
fail
6 ?4 s: T& W; Y( c/ f5 thelp
3 d: @. N$ @* N) A. {vim
' T" M5 ~* P y3 m1 c# _可以看到help行不再重复显示。
/ A* s c* C0 i# R: V( s+ e4.按照数字排序
& m+ s+ @4 g! D5 @% A如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:( C6 ^( [* f# y, c# ^
sort -n file
% ~" }4 |1 _% X; S" }9 p, Q5 j. [& K由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
' {7 r2 m8 c- g1 \* L$ }过滤显示文本--sed+ z/ r3 W6 u; d, e% R; y2 `
' q0 z$ H% B$ r/ O: c
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。/ x5 M! X" @6 C7 _" H
1.显示匹配关键字行
" D* P3 @% y* p& J5 a! h8 o有时候查看日志,可能只需要查看包含某些关键字的日志行:' A/ C, h! m X9 y9 G
sed -n "/string/p" logFile
; `/ o9 I* r; Z上面的命令表示打印包含string的行。
6 d, s; r7 N- [0 j! u% {+ c( I2.打印指定行9 q! b0 z9 N' u, P5 N
sed -n "1,5p" logFile #打印第1到5行
) b# L( \6 _9 K6 A# psed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
/ l7 F. d& X0 ?' V$ Z: P; Z' b, Zsed -n "10p" logFIle #打印第10行
) }7 z; ]0 n. e, m6 N去重显示文本--uniq: _0 h; s, V' L& F# h, L
; G1 S! U( F/ v3 n( Y常见用法如下:) b3 W/ w4 H/ c0 x% P+ s' }% y# R
uniq file #去除重复的行, g1 D; s! \8 }% D9 r: B
uniq -c file #去除重复的行,并显示重复次数
, f2 D2 W7 I+ m3 buniq -d file #只显示重复的行+ }1 X# G& X% e: d" Q
uniq -u file #只显示出现一次的行: l: C9 f" Q) `9 u2 I
uniq -i file #忽略大小写,去除重复的行$ G6 h K3 ]6 A. j9 h/ w1 g% d
uniqe -w 10 file #认为前10个字符相同,即为重复" L/ s1 ^5 z9 v" M. x4 `
文本编辑查看--vi
! a' d. _! H; o+ j: M+ f; F( B1 a1 `3 L# [" Z: F- }5 e3 y
查看文件也很简单:# Z4 I4 R- U7 l
vi file7 u1 m. ]' n8 f; t; S! K
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。
9 }$ p( M$ C Z. u O& A6 o4 N总结
9 x+ A4 p A0 k5 D; z
% b9 l- s3 r" u+ Z文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
) q* U, w: v* i' w# {
|