第5章 文本处理和字符串操作
来源:互联网 发布:ssh命令指定端口 编辑:程序博客网 时间:2024/06/03 20:39
1. 常用的文本操作
1.1. 取出最近访问的5个普通文件,并要求输出文件名和最后的访问时间
执行命令:
$ls –lut|grep “^-”|head -5|cut –c41-
解析:-t表示ls命令在输出时会按修改时间来排序;-u表示ls –l命令显示出文件的最后访问时间;”^-”是正则表达式,表示以横杆字符’-’起始的行;通过cut命令把无关信息删除,选项-c指定了cut命令会保留并输出那些字符。
选项-c有两种指定参数的方式:一种是通过横杆字符’-’指定一个范围;另一种是通过逗号连接多个范围。范围有如下一些指定的方式:
范围
描述
N
第N个字符
N-
从第N个字符一直到当前行结束
N-M
从第N个字符一直到第M个字符
-M
从第一个字符一直到第M个字符
1.2. 假如有两个文件name.txt和tel.txt,它们分别记录了员工的姓名和电话号码,如果希望把两个文件中的用户名和电话号码一一对应起来,该如何操作?
案例:
name.txt内容如下:
Matti
Aarnio
Dragos
Acostachioaie
Mark
Adler
Monalisa
Agrawal
tel.txt内容如下:
555-0542
555-1234
555-1256
555-2345
555-3456
555-4567
555-5678
555-6789
命令执行:
$paste –d’:’ name.txt tel.txt|cat -n
1.3. 检查当前系统中的各种Shell程序,统计出它们各被多少个用户使用,并把统计结果按照从多到少的顺序打印出来。
执行命令:
$cat /etc/passwd | cut –d: -f7|sort|uniq –c|sort –nr
解析:选项-f7表示每行的第7个字段;uniq –c是合并统计;sort –nr 选项-n表示按照数字的大小排序,选项-r表示从大到小显示结果。
1.4. 统计文本文件中各个单词出现的个数
案例:
#!/bin/bash
#定义函数count,用来统计一个文件中的字数
count(){
#函数需要一个参数才可以正确调用
if [$# !=1]
then
echo " Need one file parameter to work!"
exit 1;
fi
#删除标点符号和特殊字符
#构建一个很长的管道命令,每一段都单独写在一行中,增加可读性
tr '+-=*.;:{}!?<>"\n\t''' < $1 |\
#把所有大写字母转换为小写字母
tr 'A-Z' 'a-z'|\
#把连续重复的空格符替换为一个空格符
tr -s ''|\
#把空格符转换为换行符
tr '' '\n'|\
#把相同的单词放到一起
sort|\
#删除重复单词,并进行统计
uniq -c|\
#根据重复的次数进行排序
sort -rn
}
echo
echo "This script can count words of a specified file."
#使用空命令冒号构建循环
while :
do
read -p "Enter the file path(or quit):"
case "$REPLY" in
[Qq]|[Qq][Uu][Ii][Tt])
echo " Bye."
#在输入大、小写quit时,退出
echo "$REPLY"
exit 0
;;
*)
#判断输入的是一个可读的普通文件,并且内容不为空
if [ -f "$REPLY" ] && [ -r "$REPLY" ] && [ -s "$REPLY" ]
then
#当用户输入一个合法文件时
#调用count函数统计文件的单词个数
count "$REPLY"
else
#如果输入了非法文件,显示不能处理它
echo "$REPLY can not be dealed with."
fi
;;
esac
done
exit 0
语法:
tr [option] .. SET1 [SET2] --SET1会被SET2替换
1.5. 所有特殊字符替换
省略
1.6. 把TAB转换成空格符,且保证其他字符的位置不变
#cat命令的选项-T将把TAB字符显示为^I
$cat –T TABS.txt
#使用expand命令把TAB字符替换为空格
$expand TABS.txt | cat -T
2. 其他操作
1
2
2.1 windows系统的文件与Linux系统的文件之间进行转换
在Ubuntu Linux系统中,可以安装tofrodos包,使用其中的fromdos命令和todos命令来转换文本文件。
2.2 求一个字符串的长度
expr length STRING
2.3 把某些命令的输出格式化成一个表格
$(printf “PERMISSIONS LINKS OWNER GROUP SIZE DATE HH:MMFILE-NAME\n”;ls –l|sed 1d)|column –t
解析:命令ls –l|sed 1d输出当前目录下的文件列表,其中ls命令的输出经过管道传递给sed 1d命令进行处理,目的是删除目录列表中的第一行。
- 第5章 文本处理和字符串操作
- 第2章 字符和字符串处理
- 字符串对象用于操纵和处理文本字符串
- Linux 文本字符串替换和字符串切割 处理
- 第13章 使用sed处理文本
- 第14章 使用awk处理文本
- windows核心编程 第2章 字符和字符串处理
- 12.2.5 处理URL字符串文本
- 第8章 字符串处理
- 第6章 字符串操作
- shell在文本第一行和最后一行添加字符串
- Excel VBA 文本和字符串处理关键字总结
- SQL中对字符串操作和处理
- Makefile字符串、文本处理函数
- Shell处理文本字符串常用命令
- 字符串处理之文本规范化
- 第 17 章 文本和字体
- 第八节 Shell文本操作
- 威佐夫博弈(Wythoff Game)
- Python 随记
- POJ2104 k-th number
- day19 part1:网络安全态势感知
- android studio 导入新项目注意事项
- 第5章 文本处理和字符串操作
- 关于JS的练习笔记(闭包)
- SVM总结
- 安装nginx
- CodeForces - 589A(字符串)
- java中Map,List与Set的区别 (http://blog.csdn.net/speedme/article/details/22398395)
- 40个Java多线程问题总结
- 缓存、缓存算法和缓存框架简介
- linux进程通信之信号量