Linux平台及应用
潘小玲 郑国华 丁敏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

文本文件操作命令

发布时间:2020-02-28 06:53   发布人:潘小玲   浏览次数:795

(1)常用的文本文件操作命令

下表中列出了一些常用的文本文件操作命令。

命 令

功 能

命 令

功 能

cat、tac

显示文本文件内容

diff

显示两个文本文件的差异

more、less

分页显示文本文件内容

expand

将文件中的制表符转换为空格

head、tail

显示文本文件的前若千行或后若干行

unexpand

将文件中的空格转换为制表符

cut

纵向切割出文本指定的部分

dos2unix

将DOS格式的文本转换成UNIX格式

paste

纵向合并多个文本

unix2dos

将UNIX格式的文本转换成DOS格式

grep

按关键字抽取匹配的行

iconv

将文本从--种编码转换成另--种编码

wc

文本数据统计

tr

转换字符

sort

以行为单位对文本文件接序

sed

流编辑器,通常用于非交互式的字符串替换

uniq

删除文本文件中连续重复的行

awk

awk是-种用于处理文本的编程语言工具,通常用于处理有格式的文本

(2)正则表达式

在许多文本处理工具(如grep、sed、awk、vi 等)中都可以使用正则表达式。正则表达式是使用某种模式(pattern)来匹配(matching) 一类字符串的一个公式。通常使用正则表达式进行查找、替换等操作。虽然复杂的正则表达式对于初学者来说晦涩难懂,但对于Linux使用者来说,学会使用正则表达式是非常必要的。在适当的情况下使用正则表达式可以极大地提高工作效率。POSIX 风格的正则表达式有两种:基本的正则表达式( Basic Regular

Expression, BRE)和扩展的正则表达式(Extended Regular Expression,ERE)。

正则表达式由一些普通字符和一些元字符(metacharacters) 组成。普通字符包括大小写的字母、数字(即所有非元字符),而元字符则具有特殊的含义。下面两表中分别列出了POSIX RE的元字符及其含义。

POSEXRE用于方括号之外的元字符

特殊

字符

含义

类型

举例

说明

^

匹配首字符

BRE

^x

以字符x开始的字符串

$

匹配尾字符

BRE

x$

以x字符结尾的字符串

·

匹配任意一个字符

BRE

l..e

love,life,live…

?

匹配任意-一个可选字符

ERE

xy?

x,xy

*

匹配零次或多次重复

BRE

xy*

xy,xyy,xyyy…

匹配-次或多次重复

ERE

xy

xy,xyy,xyyy…

[...]

匹配任意-一个字符

BRE

[xyz]

x,y,z

( )

对正则表达式分组

ERE

(xy)

xy,xyxy,xyxyxy,

\{n\}

匹配n次

BRE.

co\{2\}gle

coogle

\{n,\}

匹配最少n次

BRE

co\{2,\}gle

coogle,cooogle,coooogle…

\{n,m\}

匹配n~m次

BRE

co\{2,4\)}gle

coogle,cooogle,coooogle

{n}

匹配n次

ERE

co{2}gle

coogle

{n,}

匹配最少n次

ERE

co{2,}g]e

coogle,cooogle,coooogle…

{n,m}

匹配n~m次

ERE

c{2,4}gle

coogle,cooogle,coooogle

|

以或逻辑连接多个匹配

ERE

good|bon

匹配good或bon

\

转义字符

BRE

\*

*

 

POSIX RE用于方括号之内的元字符

特殊字符

含义

类型

举例

说明

^

非(仅用于起始字符)

BRE

[^xyz]

匹配xyz之外的任意一个字符

-

用于指明字符范围(不能是首字符和尾字符)

BRE

[a-zA-Z]

匹配任意一个字母

\

转义字符

BRE

[\.]

.

3)常用的文本文件操作命令举例

下表列出了一些常用的文件目录操作命令的使用举例。

常用的文件目录操作命令使用举例

命 令

说 明

cat /etc/passwd

滚屏显示文/et/passwd的内容

cat -n /etc/passwd

滚屏显示文件/etc/passwd的内容并显示行号(等同于nl/et/passwd)

more /etc/passwd

分屏显示文件/etc/passwd的内容(注意<Space>键、<Enter>键和q的使用)

more 10 /etc/passwd

从第10行起分屏显示文/etc/passwd的内容

less /etc/passwd

分屏显示文件epasswd的内容(注意<Space>键、(Enter)键、<PgDn>健、<PgUp>键和q的使用)

head -4 /etc/passwd

显示文件/etc/passwd前4行的内容

tail -4 /etc/passwd

显示文件/etc/passwd后4行的内容

tail -n 10/te/passwd

显示文件/epasswd从10行开始到文件尾的内容

tail -f/var/log/messages

跟踪显示不断增长的文件结尾内容(通常用于显示日志文件)

cut -f1,3-5 -d:/etc/passd

以冒号作为问隔符显示/etc/passwd的第1、3、4、5列

paste mytxt.en mytxt.cn

纵向合并文件mytxt.en和mytxt.cn

wc myalllist

统计指定文本文件的行数、字数、字符数

wc -l myalllist

统计指定文本文件的行数

tr 'A-Z''a~z' mytxt

将mytxt文件中的所有大写字母转换为小写字母显示在屏幕上

sort mytxt

以行为单位对文本文件mytxt排序(以ASCII码顺序),

sort -u mytxt

以行为单位对文本文件mytxt排序(对相同的行只输出一-行)

sort -r mytxt

以行为单位对文本文件mytxt排序(以ASCII码逆序)

sort -n mytxt

以行为单位对文本文件mytxt排序(根据字符串的数值进行排序)

grep my mybxt

在文件mytxt中查找字符串my

grep -i my mylist myalllist

在多个指定的文件中查找字符串my(忽略大小写)

grep -v "^#" /etc/grub.conf

显示文件/etc/grub.conf除了以#开始行

grep -l root /etc/*

列出/etc目录下所有的内容包含字符串root的文件名

grep-lr root /etc/*

列出/etc目录包括子目录下所有的内容包含字符串root的文件名

diff httpd.conf httpd.conf.bak

比较文件httpd.conf和httpd.conf.bak的差异

dos2unix -k *.txt

将当前目录下所有后缴为txt的文件转换为UNIX格式(不改变时间戳)

dos2unix -k -n dosfile linuxfile

将DOS格式的dosfile文本文件转化成UNIX格式的linuxfile

iconv -f GB2312 -t UTF-8 -o outputfile inputfile

将编码为GB2312的inputfile文件转化为UTTF-8编码的ouputfile

sed 's/Windows/Linux/g' myfile

将myfile中的所有Windows替换成Linux

sed 's/cc*/c/g' myfle

将myfile中所有连续出现的c都压缩成单个的c

sed 's^[\t]*// ' myfile

删除myfile中每一行前导的连续“空白字符”(空格,制表符)

sed 's/ *$/' myfile

删除 myfile中每行结尾的所有空格

sed 's/'^>/' myfile

在每一行开头加上一个尖括号和空格(引用信息)

sed 's/'^>//' myfile

将每一行开头处的尖括号和空格删除(解除引用)

sed 's/.*\∨// myfile

删除路径前缀

sed '/^$/d' myfile

删除所有空白行

awkF{print$1,S5}'/etc/passwd

以分号为间隔符,列出/etc/passwd的第1列和第5列