前言+ [4 c: U* a. E! x% o/ G( G9 ~9 ]
- k/ k8 {$ Y( |: |1 x9 ILinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
9 U# ~0 t* A$ P# O0 o6 v全文本显示--cat- A, n+ X+ I; H+ q; S& K
! }* T) D. E. K) O9 \
cat可能是常用的一个文本查看命令了,使用方法也很简单:
2 C- C |! o" m6 i: ^cat file #全文本显示在终端
4 U* f1 K9 p8 qcat -n file #显示全文本,并显示行号5 F$ N) W/ J7 O- y6 }, Q8 @; B1 W/ f
另外,cat也可用作合并文件:9 v/ {- x+ e' O0 E4 }+ Q8 ]
cat file1 file2 >file3* g" r) o: @9 L3 z. H. P. k- }
该命令将file1 file2的内容合并写到file3中。2 f. S8 {2 o ^' l. o
倒序显示全文本--tac( `; x0 L: b2 \8 ~% n
( _4 N& B: U. U+ |4 @( G* p
tac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。5 r% I \ Z% a
tac file
6 m3 m$ h& D0 F8 S Y' l' N& x' {分页显示文本--more
* }+ W ^) I3 j3 Q) h
& d, }, ]7 u" a' @7 P+ Xcat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。; |+ s' p1 |' V3 D7 R; D& g
1.显示内容. x* v% b& B" \; b8 z
more file! Z/ \4 j' i# ~* v3 p5 A# c- \5 a
之后,就可以使用按键来查看文本。常用按键如下:
9 G5 B1 P$ t, z' t! k+ X7 W回车 #向下n行,默认为1行
! B+ \% z; v' [/ o* B, n空格 #向下滚动一屏
$ G1 P. d9 A% ?b #向上滚动一屏) i& s$ ~ H( C! A( S0 ~6 H* h, A- C
= #输出当前行号
% |5 h5 U4 l' c/ ~; E/ f:f #输出当前文件名和当前行号
1 t8 G( S& B- |# X; a+ sq #退出
! g& T* N" F$ M3 c8 ~2.从指定行开始显示
) A( W+ J/ D4 e8 M2 }9 {6 W, |7 V# mmore +10 file
+ S# r0 P& y/ `, D" g! G该命令从第10行开始显示file的内容。
9 e4 T9 H, x: }% o! n8 } {' }3.从匹配的字符串行开始显示9 N. O6 l- E1 ?5 L! s3 a: Y3 e M
more +/string file
) n+ ~- ?7 N+ L7 l该命令从有string的行的前两行开始file的内容。4 j+ x, f# h" q" n; N' M. I
任意浏览搜索文本--less
' C. d$ a& x# J) \0 f) V6 o, v/ P$ q' a# N1 p: ?: S! [% x
less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。& C2 ~- h3 n t" g) Y) o" r
常见使用方法:
% C; {; ?* l, R# { e* \% Qless file #浏览file
( T* V$ I- W `3 v2 f7 k$ @8 fless -N file #浏览file,并且显示每行的行号8 ]5 O, I+ V, r) k7 ^0 F
less -m file #浏览file,并显示百分比& a7 D8 D! Q/ G# p) X( M( g- e
常用按键如下:
W+ V0 Y' Z4 Y! o& z8 A6 |f #向前滚动一屏2 w7 Q, }+ r! O
b #向后滚动一屏- a9 i0 Q8 U6 E$ k
回车或j #向前移动一行
% ~; j1 l( w; A. z) z& ck #向后移动一行8 R) k$ |! b5 Y# n5 ?& t2 c7 w9 j
G #移动到最后一行
4 e) Q/ { |: h' Ag #移动到第一行
, a4 D0 r8 j" U* u/string #向下搜索string,n查看下一个,N查看上一个结果& z2 r9 J$ Y! Z2 E& S
?string #向上搜索string,n查看下一个,N查看上一个结果7 K4 y/ o G9 p3 V
q #退出
7 M d9 O" H& Z- w( i相比more命令,less命令能够搜索匹配需要的字符串。7 A: @5 f! e" [
另外,less还能在多个文件间切换浏览:
& x$ b- b; c' i- y. d e$ rless file1 file2 file3
( E! a8 _& X; A:n #切换到下一个文件
2 f% X! J+ i8 i5 x:p #切换到上一个文件) H+ q1 k3 O2 j# B9 R1 `+ h
:x #切换到第一个文件: d( U2 ?9 X* ]7 [
:d #从当前列表移除文件
3 _9 y& x8 l. T/ e显示文本头部内容--head
$ `% A4 p; ] E
+ h7 J2 O9 J# T8 I. D& _/ H: Khead命令的作用就像它的名字一样,用于显示文件的开头部分文本。( B+ B+ D- V: d' T) K& N
常见用法如下:
3 ^' U0 `1 r1 ` z3 uhead -n 100 file #显示file的前100行
+ a, \* P# e: W8 Lhead -n -100 file #显示file的除最后100行以外的内容。 4 K! x! o6 N! e* U$ ~
显示文本尾部内容--tail/ |% H/ O; g+ k0 L4 k
5 ?1 z2 t: I1 {# L和head命令类似,只不过tail命令用于读取文本尾部部分内容:
7 g' L/ Q z0 U9 ^& [tail -100 file #显示file最后100行内容6 i: R) A, @4 Y% h% N
tail -n +100 file #从第100行开始显示file内容
' i2 o5 k6 q T% h% itail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:, f R5 Z5 \/ S' o
tail -f logFile; D# \0 k$ X- p' W, `
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。: M4 I/ Z5 H( V/ V" o3 U9 O
指定顺序显示文本--sort
& o. ~9 P# d) Z6 A
; L4 q% i" y( d9 A W6 ysort可用于对文本进行排序并显示,默认为字典升序。
0 j- g# R [& o8 K ?例如有一段文本test.txt内容如下:" g. s0 @ u, k5 T, o. r
vim/ [6 {3 [! ?) M M9 y
count
' a! G2 ? G$ p: L& u/ ifail4 m0 J% C( N. W8 O6 g( r U
help
. t; _( U3 q7 W8 T- t5 ?0 shelp# [7 o8 v8 i- w( ~
dead
- Z6 r/ g a# u: ^8 Z0 `, gapple$ R" m+ m+ @9 i5 k
1.升序显示文本1 \9 q. b$ H7 i5 d( n8 F" y- }
使用命令:
( [( b2 e* R* ~ {sort test.txt6 \* G# v( y! D, K
apple
3 B3 j: L" y$ Z2 v0 P; d6 }; @count3 y1 I) I+ M. L* M/ u
dead( c, D% Y u; x& `
fail
( I/ _6 @& T- Bhelp6 K6 O/ I$ _* _1 Y: H
help; I* E$ j; c q: d$ E7 C& V
vim, L$ B: s: q& A: R
文本内容将以升序显示。* s# K, i8 A9 r& g. g
2.降序显示$ u% u9 Q N+ ~
相关参数-r:( y( T- o) e1 v6 a! }
sort -r test.txt
- ~7 Q$ e8 E2 Wvim
# i, a7 B K; T& ]$ o1 ?# f# Ahelp9 p$ D$ B1 N; |4 G# b- x' R6 R9 F
help. {# G$ J- y1 i# ^. V5 F1 c
fail2 ^( j9 L& {" H
dead
- M+ I, I# O7 C" n2 zcount' s. c% I# j: J& x* R% E
apple
/ l% Y+ E4 k& q/ t$ I. ?( }3.去掉重复的行
5 c, n0 q3 d. c! V6 s, ?% Y我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:1 Y2 q" \5 W4 K4 z
sort -u test.txt
0 v }* Q# }8 O2 J$ ]$ z+ o$ dapple
* O+ X" m e# c$ R6 p: Icount9 G6 N+ k* y( S4 ~; [
dead0 m8 X- Y2 P6 C. s2 X
fail
/ |" ^" S) ^7 U' A5 s! ^help
% `3 ~2 `& `8 y' Zvim. Q$ ^7 A6 y) t
可以看到help行不再重复显示。
/ m1 _1 x5 c x, w( `4.按照数字排序6 _/ I% F2 R- I: Q3 O. W# X
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:* ?1 Y0 |- A2 G# h: k
sort -n file
3 y- f0 f$ f x9 m由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。6 T2 e" i& d3 E. \) l
过滤显示文本--sed8 H" C D6 n; S a: U5 M! O
/ j( a: H0 n6 P: E* hsed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
8 b' x: W2 P1 ~) k1.显示匹配关键字行5 x% [7 Z2 l& b8 q b# m# @
有时候查看日志,可能只需要查看包含某些关键字的日志行:6 I5 w- T& [! Y1 r s1 M# N
sed -n "/string/p" logFile
. f) ~. v; g/ n2 ]* l) \上面的命令表示打印包含string的行。' r" W9 Y' Y4 O: t6 B
2.打印指定行
# d% A0 Q5 j& P3 J0 C3 fsed -n "1,5p" logFile #打印第1到5行
8 v; @9 r# Y0 [- p. msed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号% t4 e4 [3 G& p+ E/ Z
sed -n "10p" logFIle #打印第10行
7 W7 h# a+ G3 @0 d9 [去重显示文本--uniq
3 d7 w5 w: @; W: n% W* a: u) l/ L7 G8 m6 D- X: m% L+ G* I2 M$ ~
常见用法如下:( l7 f) ]2 q+ T2 e
uniq file #去除重复的行9 x1 X* F" A2 s# o/ F
uniq -c file #去除重复的行,并显示重复次数
6 r4 _ P# D5 W+ u8 {uniq -d file #只显示重复的行
; O% ?" N+ w- c: T3 t! I/ Huniq -u file #只显示出现一次的行
- Q, Z7 @2 V8 i* Duniq -i file #忽略大小写,去除重复的行
5 u$ p1 \& U/ M# T7 P2 q0 }uniqe -w 10 file #认为前10个字符相同,即为重复4 J' B$ d- h% Z5 E4 N* B3 k7 d
文本编辑查看--vi
, w2 o# V0 |( v. Y/ _
+ P* i( s( {3 v/ x- t' B0 B$ \查看文件也很简单:# n0 P8 C9 m k( \
vi file+ F) o) J; V$ t6 o
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。4 B4 {! J& s3 Z. [/ `7 [
总结: J" g" A- @" r' @& h5 ~ o
3 N0 E) R# S% [文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。
' y% I# T/ d1 G* m
|