前言3 {/ c$ v6 }3 R- L% Z. K3 O
* }! _2 g4 E- d
Linux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
5 e0 H2 P. J1 n ^全文本显示--cat4 G* [1 S/ J5 u
8 ?* y6 R3 B. A8 x* V8 _
cat可能是常用的一个文本查看命令了,使用方法也很简单:7 A7 d9 }% k/ e1 W
cat file #全文本显示在终端
# w5 D- d7 Y+ B" N$ b9 [cat -n file #显示全文本,并显示行号) _# j, a0 ^$ B8 [
另外,cat也可用作合并文件:
5 i/ s( p: G- H# F2 |cat file1 file2 >file3
1 R |6 O* q3 u% h9 @$ b7 ?该命令将file1 file2的内容合并写到file3中。. ?% y" y$ ^/ `+ l# f. w
倒序显示全文本--tac/ u" O8 S5 X! }
" r, p, N; I4 l4 b0 J+ N7 \* }8 Ntac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
" W& x( V0 a# v3 r3 Rtac file
+ H9 ]3 _+ ?5 H6 k/ I- ^2 i分页显示文本--more+ M1 Z) u! J$ s* ^) W" m( z+ v5 O5 Z
y; A. ]0 V5 t" Q" s# j
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。
) d* C* M' x- C+ E0 u1.显示内容1 S3 s" Z5 r; j$ `
more file
4 F- n, W7 s) d; K v' D' \之后,就可以使用按键来查看文本。常用按键如下:0 S5 ^1 ]; y4 l3 { }% p* f
回车 #向下n行,默认为1行1 R, `: m0 Z* w: N# g3 x, g
空格 #向下滚动一屏
( [" ?$ q" \/ w4 Q$ A& Db #向上滚动一屏9 `9 j" C4 c* m) a1 D- w
= #输出当前行号* P3 e; g* X& \
:f #输出当前文件名和当前行号
2 j, y4 h0 }! K% y# r& @4 Cq #退出) v. S* F( j& e0 o: A
2.从指定行开始显示) r' H1 F" T- K
more +10 file! W0 c) c& i' ~* t' g
该命令从第10行开始显示file的内容。2 ^* V I7 E1 z
3.从匹配的字符串行开始显示
* K1 n+ H" d0 C& t+ `3 jmore +/string file3 m3 F2 g( E$ F
该命令从有string的行的前两行开始file的内容。
8 v9 N% N4 B8 e' N# {任意浏览搜索文本--less
* [: e2 A: g Q) [. A/ Q
/ h y3 n$ u {& W4 ^5 p+ Jless命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。+ a) Y5 T0 s* N ?! J, T1 D {
常见使用方法:( O( U \! E3 m! c% x M3 a( G2 k
less file #浏览file
- c) M$ u' \, Z: C/ Kless -N file #浏览file,并且显示每行的行号1 d V: {" k4 T& m
less -m file #浏览file,并显示百分比
, L( Y+ D/ M1 K1 S4 R. U& B+ c常用按键如下:
3 t' j+ }0 a& Af #向前滚动一屏$ m; W0 n) z/ Q: y. \
b #向后滚动一屏! [- C B9 l7 g6 ]
回车或j #向前移动一行
2 ^' ?4 v5 N% @3 V; [k #向后移动一行
$ R I% j1 c5 N! d* aG #移动到最后一行3 g5 }# | c& f8 l3 q
g #移动到第一行# m; r! o% `! N0 Y+ M7 Q
/string #向下搜索string,n查看下一个,N查看上一个结果- d. C1 Q5 G3 w+ @% e8 ?# Y
?string #向上搜索string,n查看下一个,N查看上一个结果
0 o& x$ j9 ?4 J3 X7 |q #退出# E4 b5 [7 ^" |3 m/ Q P
相比more命令,less命令能够搜索匹配需要的字符串。4 G1 @; L* m. |- j: n% e
另外,less还能在多个文件间切换浏览:
- X' t0 b8 o" Y3 F7 kless file1 file2 file35 c f( {4 P$ n( L0 N( I" h
:n #切换到下一个文件! t/ }1 y, X& U* N! h
:p #切换到上一个文件$ G( i6 R0 K/ d
:x #切换到第一个文件8 e3 G% c# o0 w9 w
:d #从当前列表移除文件
8 X1 E5 X. W& ^- h1 q+ v显示文本头部内容--head/ u& p! a: D2 g8 P
- _; U: j4 S+ |+ t+ }9 o3 Mhead命令的作用就像它的名字一样,用于显示文件的开头部分文本。
5 w% }, x/ l* y, H/ g( j常见用法如下:
3 J$ p& o# v& R! G0 Z1 Dhead -n 100 file #显示file的前100行
: d, o" H: l9 w4 M3 phead -n -100 file #显示file的除最后100行以外的内容。 & b, I* G# W- Y8 n8 [" k- i/ V
显示文本尾部内容--tail1 F. P; z% F. D. O1 {
2 W, ^0 w/ f! |# }' _2 d! ^4 d3 U和head命令类似,只不过tail命令用于读取文本尾部部分内容:
3 X: u) g ?( dtail -100 file #显示file最后100行内容9 N0 ]5 u& d7 P; X
tail -n +100 file #从第100行开始显示file内容
( i. ~) V6 H* Y: g. mtail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:4 A9 n4 [ |; M. I
tail -f logFile# y6 H5 s; S3 C# O/ a7 Q
对于更新的日志内容,会实时打印到终端上,方面查看实时日志。
: C# T b9 b/ b3 F4 F' N7 X指定顺序显示文本--sort O' X, w9 F! A9 i
5 x+ {) V" @+ z7 \3 N9 Osort可用于对文本进行排序并显示,默认为字典升序。
$ X) m W: L% o0 |例如有一段文本test.txt内容如下:9 u2 \; B" l: i0 k6 W; T% ^
vim
2 F0 t1 W. @6 a* L" Jcount
' c8 Z8 Z6 c9 S; X2 yfail `( e& ]0 K/ ^* ^0 r
help
6 n0 A+ g( H% C+ v. k$ j3 \help5 m" F: y4 G! ^
dead c! X7 F* o8 w& }7 ^' k1 k
apple1 G- C# X( D# k
1.升序显示文本! ~, W# C* x) j1 V6 }
使用命令:: k$ t: N6 _2 T7 c! K
sort test.txt* F: i' k, L( e) ]" W
apple
3 E' A/ _9 r! \ Q/ Bcount
' a# ^9 l& z$ w$ k0 w+ [dead8 b" Q) u3 D. M2 B
fail) n. F) e! _4 U/ j& h* C$ \. [3 T
help8 w5 j% g, k: U/ U9 [1 w7 Y/ U( I
help" @* z0 C ^' G/ C) p
vim: a: h" X& ]' U F2 z
文本内容将以升序显示。
@: M* |/ y+ \7 m* c" ?2.降序显示
0 y$ `2 W6 M0 H7 b相关参数-r:" l" S6 v, R {/ A W$ ~( f! D& `+ T$ J
sort -r test.txt: R) Y9 k% s) p+ r
vim9 G: W% @2 K5 ^3 O1 T, o0 d3 E
help
2 u }$ v9 b$ Nhelp/ \- Z6 q+ z* p X- |# ~) i. R$ y
fail! A3 j: ~9 w3 r$ O
dead- ?, K; @7 ^) W% X# v1 {- o
count# p* z% c& X. J+ i
apple
; [: U C' T# g5 U5 C# _3.去掉重复的行
( ^- n5 Q% z4 g; _我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
$ p) S- r' K( U% a5 ]! D( Tsort -u test.txt
. a0 s* P4 c1 ^! {0 Q6 O; H+ papple! I( A) k: X% p4 b; i
count
& q7 g) J* `( d3 x- J( A- T, \dead
" A$ M% F% l( `6 b5 b4 h/ [fail
% I- b9 K% ?* D. x3 X thelp
! s: j# ]# `8 cvim
7 g: E4 W9 R& t4 H% E( m可以看到help行不再重复显示。# L7 h# e1 R$ b k( L: a, s
4.按照数字排序
7 l8 ?2 G( |/ {: T; K# P1 G如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:, k Q3 X0 Z8 \; a5 L
sort -n file
: l; j0 N. H h- Z" K/ ]7 d1 `由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
$ [6 I# F$ g* s0 t: t# E; y过滤显示文本--sed! T+ a0 e9 b# l
' e% m6 f P5 N9 A3 x& T3 csed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
" _2 m. G& d: S' ?( j, H( D9 g1.显示匹配关键字行
% @; E [, J; B8 O有时候查看日志,可能只需要查看包含某些关键字的日志行:
( \ i/ V9 t6 O/ z' {! }8 _6 csed -n "/string/p" logFile
( H, a) T* D% R3 Q上面的命令表示打印包含string的行。
. O# Z+ w. D7 d+ t, E2.打印指定行( @/ A$ N! D3 Q; s H: a
sed -n "1,5p" logFile #打印第1到5行
: Q3 X& E9 N: Used -n '3,5{=;p}' logFile #打印3到5行,并且打印行号7 A0 b f3 n _4 I5 V
sed -n "10p" logFIle #打印第10行
% D4 v! S1 m( N( x去重显示文本--uniq2 d6 y3 i& v- h( n1 g# ~4 r
0 f& m. r- U! N# |/ z/ s
常见用法如下:
a( K0 Y" }- ~, M) q% Guniq file #去除重复的行/ c7 b, O5 G1 L B4 t
uniq -c file #去除重复的行,并显示重复次数' G1 w7 T! V! G! K Q! I
uniq -d file #只显示重复的行1 A( D0 I) o8 D
uniq -u file #只显示出现一次的行
" \5 j0 n1 |- y. U Q, y0 F% x$ Euniq -i file #忽略大小写,去除重复的行
' M1 _6 t/ q1 t- G$ zuniqe -w 10 file #认为前10个字符相同,即为重复
* O& S2 I, B1 A3 Z! V* F3 z4 P文本编辑查看--vi
- F0 `" U, H- k. }) Y8 J2 Z; D3 P* n G3 X- M$ w. G
查看文件也很简单:
2 I8 |! {5 N. s( P6 C; Ovi file7 Y- z* }2 Z7 i8 M; y- x" W, [
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。+ ?4 O- J6 Y4 c$ q$ g0 f
总结) T5 e- u0 \# M3 |* T# ]
' i( \6 t* N5 }8 E3 ~
文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。; l/ b; y3 H* @* v
|