前言
. L6 S/ ?! p4 k( U* a* I
6 S/ l1 _% Y8 j: jLinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
' Z! v9 h% H8 ?全文本显示--cat
# b! C, b! A) ?4 C' O# c0 B
2 |; f# |" K9 l0 d; ^cat可能是常用的一个文本查看命令了,使用方法也很简单:
; h! t3 k' f' k+ Jcat file #全文本显示在终端
% ?; W. }: R# m% ~+ c# Ucat -n file #显示全文本,并显示行号5 A( S {6 b# o' K( N% M/ {5 D. O6 O3 s
另外,cat也可用作合并文件:9 w3 P) Q9 }+ V$ W* c
cat file1 file2 >file34 V; z9 i" J7 Y9 w. u% R
该命令将file1 file2的内容合并写到file3中。
( A! d6 N$ t" w1 o倒序显示全文本--tac* |) F) Z4 @5 v' @+ A7 X
, }. A p6 g, r. v' s9 stac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
2 s! @$ _* K: z/ p) Jtac file* ^) {' \# b" o# p+ ?3 Z- i8 L
分页显示文本--more% [/ v( D+ S) z
: h2 D! L( S* g. H J+ n. {. acat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。9 m0 D2 ~4 Q# `$ s
1.显示内容
$ a3 A9 Y, r+ A: L( p1 H- rmore file
, ]3 J& x W) f5 V1 ^之后,就可以使用按键来查看文本。常用按键如下:
4 ~% x3 `; h% T U/ l( g8 W回车 #向下n行,默认为1行6 ^' V& h& L( w
空格 #向下滚动一屏
# ?$ F; O4 `- \b #向上滚动一屏9 ?( I' R E/ }6 l( c N
= #输出当前行号
4 ?! Y# D- |9 x:f #输出当前文件名和当前行号2 W K0 O# w3 `) ^! |* }
q #退出
! k3 E$ n. x) _2.从指定行开始显示. D+ M; K! P# `/ B! d1 }
more +10 file
: E$ M+ M- u- \" z1 x该命令从第10行开始显示file的内容。
: F d; y/ O q3 d! t3 K4 G% ?3.从匹配的字符串行开始显示
1 g; v6 Y5 o( hmore +/string file6 N$ {. L% r0 k3 ?" j' G# u
该命令从有string的行的前两行开始file的内容。
4 w) R0 H! C4 ^) E任意浏览搜索文本--less
* T) z* U6 _0 p) X6 y g* H6 J% P+ F! X; b
less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。0 q# }& d1 B0 O4 B. w' |
常见使用方法:
* G {& O: L o& k) C# h& U* O9 Yless file #浏览file
5 u! V7 D4 r! j$ B6 ~. y' o. I* iless -N file #浏览file,并且显示每行的行号: B( {% h( `% H+ h6 @$ H# v
less -m file #浏览file,并显示百分比7 z% K. u/ d/ A' _ X( |: E4 M8 S
常用按键如下:
3 f s: t9 m( x" B& lf #向前滚动一屏' F% T& @, | l" C
b #向后滚动一屏 D/ Q" C3 J0 s3 J9 U" f
回车或j #向前移动一行/ Q1 G( X. d6 E; L9 U
k #向后移动一行
. Z# G- w- L7 pG #移动到最后一行
/ g5 p0 M. N, a4 f' `g #移动到第一行* T3 S7 H1 B2 n( I
/string #向下搜索string,n查看下一个,N查看上一个结果
8 w5 w) Q0 B. P# U* V; ^?string #向上搜索string,n查看下一个,N查看上一个结果2 U' \* I6 u+ M2 v8 s
q #退出
* z' Y; w( O$ s% e/ B; [% C相比more命令,less命令能够搜索匹配需要的字符串。2 |) q( r4 J! ]
另外,less还能在多个文件间切换浏览:) e. }$ v$ Z& U; l& C
less file1 file2 file3; F+ A: n1 N8 p1 E
:n #切换到下一个文件! d7 \7 P* i5 |7 Y% T9 T
:p #切换到上一个文件5 B: s( a1 `+ {! _7 N# m7 j
:x #切换到第一个文件
2 R* u6 A d' v2 w/ O# z. H. ^:d #从当前列表移除文件8 e1 z# H7 S& ?2 w# G4 Y3 f
显示文本头部内容--head
5 }9 `" M& Q% x5 F s3 V* b+ p5 H( a+ z5 K
head命令的作用就像它的名字一样,用于显示文件的开头部分文本。
1 Z1 H& N$ {" F# H常见用法如下:
5 ?2 a- ~3 C4 ~head -n 100 file #显示file的前100行# `7 n# D" {4 ~( e- R3 d0 P
head -n -100 file #显示file的除最后100行以外的内容。
3 n! ^& [1 i5 ?# B$ p1 ^ d显示文本尾部内容--tail
2 b0 S1 p2 j& ~9 t4 F5 @1 c# d+ p) G# u# R$ S, J
和head命令类似,只不过tail命令用于读取文本尾部部分内容:' `! K3 @) x* C& E) T/ D
tail -100 file #显示file最后100行内容
+ W. P2 P5 m2 O8 Ztail -n +100 file #从第100行开始显示file内容 ' h, `3 N! y3 f
tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
& P* Z. O; @1 d" ]- C* Gtail -f logFile; q, z* V+ R N5 |( o
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。9 B% P0 b2 r* `
指定顺序显示文本--sort
2 h l4 K- p. }0 R1 f
! E$ }8 j/ K" ]! p, U# ], T; Isort可用于对文本进行排序并显示,默认为字典升序。
' [, H2 W( L8 b1 A, b! I% X' O) h例如有一段文本test.txt内容如下:
1 |- ]. G* i0 ~( \vim
7 ?' k9 K( G, X* B9 [count6 S1 u1 d1 R7 j7 r
fail
1 U9 z7 Z# J' r3 ~help. T( x. i: S- ^5 h" E; U
help0 o- z/ G3 `4 e6 ^, E
dead- b( l& F; s. _2 {
apple
! M& f" c5 Y( _# w) b! i5 e1.升序显示文本
5 J4 S: O8 x7 W, ?) K$ f. Q使用命令:0 T. U" E* R" q% Z; U( M
sort test.txt
* ?) n" u, f! F* v) Q1 t5 dapple
. |% P" h. G+ w8 c& T) Z2 ]. \) wcount
- w( K2 _/ O: U) qdead
4 x5 E0 W8 f* ]* p/ ]fail
- ` Z! R/ p7 f9 i4 t' z. e+ xhelp+ e7 h) P* [+ ?2 F ?8 I
help
3 J. a! G1 O) h7 x3 [2 f; ?vim
: Z3 L" M/ R) l# t文本内容将以升序显示。
& l, J ~6 ]9 G+ U+ r* U: f2.降序显示7 D) m! Q0 p' M- {
相关参数-r:
: g4 K; k0 G( X% x6 _ } [* Hsort -r test.txt% v4 I: {& d; U; E1 X' g
vim
: J E x; d( m+ m( q$ _9 {$ I! Xhelp
' E6 s& e* q" o+ o T8 Whelp' q3 S" v0 U( V' x9 n% K/ Z, K# r
fail
' Y! q1 \* A Edead
# @' c, Y+ C* r7 h& xcount) w* }8 g9 C/ V1 Z1 j8 U) M
apple6 e) `% S2 f! b9 b. z h7 t0 s
3.去掉重复的行
% ?$ x' i4 T) ^" h8 b5 l我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
- J* ~; L: K8 fsort -u test.txt, j* A# p( U9 f5 c6 ?
apple
+ t0 C: {: U! H) ` I4 kcount0 x# l$ ^$ }# N% C
dead
' ?' p2 M E( Ofail
; z* Z4 P7 X% c8 \6 }help
0 b. w: [* u. c6 }- [6 R9 cvim( Y' A; o+ u- ~
可以看到help行不再重复显示。# L; X& _: }; A- {1 n5 W: ]; P
4.按照数字排序
6 B) ]- `7 w. N: Z如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:
' S% d# x4 P. C6 ysort -n file
, p$ x% f: u" K% C* i, M由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
" T! H, ?/ U8 W' {过滤显示文本--sed( ?7 t, g/ f. e3 j
; ]) o n4 Q9 x$ L$ W* P$ d/ ~
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
, L! W6 D4 b- t7 |2 |* O7 I( z5 ]/ z1.显示匹配关键字行0 {$ p# y/ \0 [. l' l* ~
有时候查看日志,可能只需要查看包含某些关键字的日志行:
7 _2 x1 D1 z% z5 T! ysed -n "/string/p" logFile5 x" c0 b5 I9 R1 M& w! u) F
上面的命令表示打印包含string的行。
9 T# D3 J- ]+ i/ S e+ L2.打印指定行0 D# r& s& u+ d2 I6 `! J5 N3 o
sed -n "1,5p" logFile #打印第1到5行! Q4 f4 w: s6 ?& y- a& I% n
sed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号" q K* U) Y4 m7 z
sed -n "10p" logFIle #打印第10行0 A. A0 {( j5 Q- l
去重显示文本--uniq
7 g8 z( g. e6 n3 u) M, X- a. B: c L7 s' I6 ?
常见用法如下: }+ n) H8 H3 o4 q
uniq file #去除重复的行# i$ x- Y$ `$ A. d
uniq -c file #去除重复的行,并显示重复次数0 A) O0 g9 W& n. n# l
uniq -d file #只显示重复的行
/ L7 T/ X5 q6 M! |6 [/ ?3 m1 W! juniq -u file #只显示出现一次的行
$ p0 F( ]. j. l8 z* }uniq -i file #忽略大小写,去除重复的行 Y5 U+ |* i) m# E* u e
uniqe -w 10 file #认为前10个字符相同,即为重复
; i8 H7 l$ o1 |& W- {5 i/ E6 F文本编辑查看--vi% @, a0 w. W4 D$ t3 p- h
# m! u" V1 J: ]+ ~" `. v$ z
查看文件也很简单:; ]! J x+ G2 k* r
vi file
7 h& x _5 I, q而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。1 | j8 M$ }; W" L) h
总结/ x* t z' v) T$ A7 x
8 f2 F% j8 [& w+ P文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
- U1 }8 @* J3 P2 w1 J* \
|