(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列 |