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内容如下:
MattiAarnioDragosAcostachioaieMarkAdlerMonalisaAgrawal
tel.txt内容如下:
555-0542555-1234555-1256555-2345555-3456555-4567555-5678555-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}echoecho "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 ;;esacdoneexit 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
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命令进行处理,目的是删除目录列表中的第一行。
新闻热点
疑难解答